diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bf983f0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/xbean-4.8-source-release.zip
diff --git a/.xbean.metadata b/.xbean.metadata
new file mode 100644
index 0000000..9b1fc83
--- /dev/null
+++ b/.xbean.metadata
@@ -0,0 +1 @@
+64f049581900a100206fa065501c043de4f9dc46 SOURCES/xbean-4.8-source-release.zip
diff --git a/SOURCES/0002-Port-to-Eclipse-Luna-OSGi.patch b/SOURCES/0002-Port-to-Eclipse-Luna-OSGi.patch
new file mode 100644
index 0000000..af2e743
--- /dev/null
+++ b/SOURCES/0002-Port-to-Eclipse-Luna-OSGi.patch
@@ -0,0 +1,62 @@
+From 9e1bb9bfee86490163fb1e226556620aa8cdf7bc Mon Sep 17 00:00:00 2001
+From: Mikolaj Izdebski <mizdebsk@redhat.com>
+Date: Fri, 21 Nov 2014 10:05:05 +0100
+Subject: [PATCH 2/3] Port to Eclipse Luna OSGi
+
+---
+ xbean-bundleutils/pom.xml                                      |  8 +-------
+ .../apache/xbean/osgi/bundle/util/DelegatingBundleContext.java | 10 ++++++++++
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/xbean-bundleutils/pom.xml b/xbean-bundleutils/pom.xml
+index 72f4865..2b3459d 100644
+--- a/xbean-bundleutils/pom.xml
++++ b/xbean-bundleutils/pom.xml
+@@ -35,15 +35,9 @@
+             <artifactId>slf4j-api</artifactId>
+         </dependency>
+         <dependency>
+-            <groupId>org.osgi</groupId>
+-            <artifactId>org.osgi.core</artifactId>
+-            <version>4.3.1</version>
+-            <scope>provided</scope>
+-        </dependency>
+-        <dependency>
+             <groupId>org.eclipse</groupId>
+             <artifactId>osgi</artifactId>
+-            <version>3.6.0.v20100517</version>
++            <version>3.10.0-v20140606-1445</version>
+             <scope>provided</scope>
+         </dependency>
+     </dependencies>
+diff --git a/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/DelegatingBundleContext.java b/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/DelegatingBundleContext.java
+index 58a392b..cc8d081 100644
+--- a/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/DelegatingBundleContext.java
++++ b/xbean-bundleutils/src/main/java/org/apache/xbean/osgi/bundle/util/DelegatingBundleContext.java
+@@ -31,7 +31,9 @@ import org.osgi.framework.BundleListener;
+ import org.osgi.framework.Filter;
+ import org.osgi.framework.FrameworkListener;
+ import org.osgi.framework.InvalidSyntaxException;
++import org.osgi.framework.ServiceFactory;
+ import org.osgi.framework.ServiceListener;
++import org.osgi.framework.ServiceObjects;
+ import org.osgi.framework.ServiceReference;
+ import org.osgi.framework.ServiceRegistration;
+ 
+@@ -153,5 +155,13 @@ public class DelegatingBundleContext implements BundleContext {
+     public Bundle getBundle(String location) {
+         return bundleContext.getBundle(location);
+     }
++
++    public <S> ServiceObjects<S> getServiceObjects(ServiceReference<S> reference) {
++        return bundleContext.getServiceObjects(reference);
++    }
++
++    public <S> ServiceRegistration<S> registerService(Class<S> clazz, ServiceFactory<S> factory, Dictionary<String, ?> properties) {
++        return bundleContext.registerService(clazz, factory, properties);
++    }
+     
+ }
+-- 
+2.9.3
+
diff --git a/SOURCES/0003-Port-to-QDox-2.0.patch b/SOURCES/0003-Port-to-QDox-2.0.patch
new file mode 100644
index 0000000..95609a2
--- /dev/null
+++ b/SOURCES/0003-Port-to-QDox-2.0.patch
@@ -0,0 +1,689 @@
+From 928bd5a98dc500a31197a56c8f6c5e19a3a273f8 Mon Sep 17 00:00:00 2001
+From: Mikolaj Izdebski <mizdebsk@redhat.com>
+Date: Fri, 21 Nov 2014 10:51:38 +0100
+Subject: [PATCH 3/3] Port to QDox 2.0
+
+---
+ pom.xml                                            |   2 +-
+ .../blueprint/generator/QdoxMappingLoader.java     | 144 +++++++++++---------
+ .../xbean/spring/generator/QdoxMappingLoader.java  | 148 ++++++++++++---------
+ .../org/apache/xbean/spring/generator/Type.java    |   7 +-
+ 4 files changed, 166 insertions(+), 135 deletions(-)
+
+diff --git a/pom.xml b/pom.xml
+index 6e53649..9132fe4 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -297,7 +297,7 @@
+             <dependency>
+                 <groupId>com.thoughtworks.qdox</groupId>
+                 <artifactId>qdox</artifactId>
+-                <version>1.6.3</version>
++                <version>2.0-M5</version>
+             </dependency>
+             
+             <dependency>
+diff --git a/xbean-blueprint/src/main/java/org/apache/xbean/blueprint/generator/QdoxMappingLoader.java b/xbean-blueprint/src/main/java/org/apache/xbean/blueprint/generator/QdoxMappingLoader.java
+index 6635937..e17fd08 100644
+--- a/xbean-blueprint/src/main/java/org/apache/xbean/blueprint/generator/QdoxMappingLoader.java
++++ b/xbean-blueprint/src/main/java/org/apache/xbean/blueprint/generator/QdoxMappingLoader.java
+@@ -20,6 +20,7 @@ import java.io.File;
+ import java.io.IOException;
+ import java.net.URL;
+ import java.util.ArrayList;
++import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+@@ -31,14 +32,17 @@ import java.util.TreeSet;
+ import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
+ 
+-import com.thoughtworks.qdox.JavaDocBuilder;
++import com.thoughtworks.qdox.JavaProjectBuilder;
+ import com.thoughtworks.qdox.model.BeanProperty;
+ import com.thoughtworks.qdox.model.DocletTag;
+ import com.thoughtworks.qdox.model.JavaClass;
++import com.thoughtworks.qdox.model.JavaConstructor;
+ import com.thoughtworks.qdox.model.JavaMethod;
++import com.thoughtworks.qdox.model.JavaModel;
+ import com.thoughtworks.qdox.model.JavaParameter;
+ import com.thoughtworks.qdox.model.JavaSource;
+-import com.thoughtworks.qdox.model.Type;
++import com.thoughtworks.qdox.model.JavaType;
++
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+ 
+@@ -62,7 +66,7 @@ public class QdoxMappingLoader implements MappingLoader {
+     private final String defaultNamespace;
+     private final File[] srcDirs;
+     private final String[] excludedClasses;
+-    private Type collectionType;
++    private JavaClass collectionType;
+ 
+     public QdoxMappingLoader(String defaultNamespace, File[] srcDirs, String[] excludedClasses) {
+         this.defaultNamespace = defaultNamespace;
+@@ -79,7 +83,7 @@ public class QdoxMappingLoader implements MappingLoader {
+     }
+ 
+     public Set<NamespaceMapping> loadNamespaces() throws IOException {
+-        JavaDocBuilder builder = new JavaDocBuilder();
++        JavaProjectBuilder builder = new JavaProjectBuilder();
+ 
+         log.debug("Source directories: ");
+ 
+@@ -92,11 +96,11 @@ public class QdoxMappingLoader implements MappingLoader {
+             getSourceFiles(sourceDirectory, excludedClasses, builder);
+         }
+ 
+-        collectionType = builder.getClassByName("java.util.Collection").asType();
++        collectionType = builder.getClassByName("java.util.Collection");
+         return loadNamespaces(builder);
+     }
+ 
+-    private Set<NamespaceMapping> loadNamespaces(JavaDocBuilder builder) {
++    private Set<NamespaceMapping> loadNamespaces(JavaProjectBuilder builder) {
+         // load all of the elements
+         List<ElementMapping> elements = loadElements(builder);
+ 
+@@ -131,14 +135,14 @@ public class QdoxMappingLoader implements MappingLoader {
+         return Collections.unmodifiableSet(namespaces);
+     }
+ 
+-    private List<ElementMapping> loadElements(JavaDocBuilder builder) {
+-        JavaSource[] javaSources = builder.getSources();
++    private List<ElementMapping> loadElements(JavaProjectBuilder builder) {
++        Collection<JavaSource> javaSources = builder.getSources();
+         List<ElementMapping> elements = new ArrayList<ElementMapping>();
+         for (JavaSource javaSource : javaSources) {
+-            if (javaSource.getClasses().length == 0) {
++            if (javaSource.getClasses().isEmpty()) {
+                 log.info("No Java Classes defined in: " + javaSource.getURL());
+             } else {
+-                JavaClass[] classes = javaSource.getClasses();
++                Collection<JavaClass> classes = javaSource.getClasses();
+                 for (JavaClass javaClass : classes) {
+                     ElementMapping element = loadElement(builder, javaClass);
+                     if (element != null && !javaClass.isAbstract()) {
+@@ -152,7 +156,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         return elements;
+     }
+ 
+-    private ElementMapping loadElement(JavaDocBuilder builder, JavaClass javaClass) {
++    private ElementMapping loadElement(JavaProjectBuilder builder, JavaClass javaClass) {
+         DocletTag xbeanTag = javaClass.getTagByName(XBEAN_ANNOTATION);
+         if (xbeanTag == null) {
+             return null;
+@@ -176,7 +180,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         Map<String, AttributeMapping> attributesByPropertyName = new HashMap<String, AttributeMapping>();
+ 
+         for (JavaClass jClass = javaClass; jClass != null; jClass = jClass.getSuperJavaClass()) {
+-            BeanProperty[] beanProperties = jClass.getBeanProperties();
++            Collection<BeanProperty> beanProperties = jClass.getBeanProperties();
+             for (BeanProperty beanProperty : beanProperties) {
+                 // we only care about properties with a setter
+                 if (beanProperty.getMutator() != null) {
+@@ -219,9 +223,9 @@ public class QdoxMappingLoader implements MappingLoader {
+         String destroyMethod = null;
+         String factoryMethod = null;
+         for (JavaClass jClass = javaClass; jClass != null; jClass = jClass.getSuperJavaClass()) {
+-            JavaMethod[] methods = javaClass.getMethods();
++            Collection<JavaMethod> methods = javaClass.getMethods();
+             for (JavaMethod method : methods) {
+-                if (method.isPublic() && !method.isConstructor()) {
++                if (method.isPublic()) {
+                     if (initMethod == null && method.getTagByName(INIT_METHOD_ANNOTATION) != null) {
+                         initMethod = method.getName();
+                     }
+@@ -237,22 +241,43 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+ 
+         List<List<ParameterMapping>> constructorArgs = new ArrayList<List<ParameterMapping>>();
+-        JavaMethod[] methods = javaClass.getMethods();
+-        for (JavaMethod method : methods) {
+-            JavaParameter[] parameters = method.getParameters();
+-            if (isValidConstructor(factoryMethod, method, parameters)) {
+-                List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.length);
+-                for (JavaParameter parameter : parameters) {
+-                    AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
+-                    if (attributeMapping == null) {
+-                        attributeMapping = loadParameter(parameter);
+-
+-                        attributes.add(attributeMapping);
+-                        attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++        if (factoryMethod == null) {
++            Collection<JavaConstructor> constructors = javaClass.getConstructors();
++            for (JavaConstructor constructor : constructors) {
++                Collection<JavaParameter> parameters = constructor.getParameters();
++                if (constructor.isPublic() && parameters.size() > 0) {
++                    List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.size());
++                    for (JavaParameter parameter : parameters) {
++                        AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
++                        if (attributeMapping == null) {
++                            attributeMapping = loadParameter(parameter, constructor);
++
++                            attributes.add(attributeMapping);
++                            attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++                        }
++                        args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
+                     }
+-                    args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
++                    constructorArgs.add(Collections.unmodifiableList(args));
++                }
++            }
++        } else {
++            Collection<JavaMethod> methods = javaClass.getMethods();
++            for (JavaMethod method : methods) {
++                Collection<JavaParameter> parameters = method.getParameters();
++                if (method.isPublic() && parameters.size() > 0 && method.getName().equals(factoryMethod)) {
++                    List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.size());
++                    for (JavaParameter parameter : parameters) {
++                        AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
++                        if (attributeMapping == null) {
++                            attributeMapping = loadParameter(parameter, method);
++
++                            attributes.add(attributeMapping);
++                            attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++                        }
++                        args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
++                    }
++                    constructorArgs.add(Collections.unmodifiableList(args));
+                 }
+-                constructorArgs.add(Collections.unmodifiableList(args));
+             }
+         }
+ 
+@@ -303,7 +328,7 @@ public class QdoxMappingLoader implements MappingLoader {
+                 interfaces);
+     }
+ 
+-    private List<String> getFullyQualifiedNames(JavaClass[] implementedInterfaces) {
++    private List<String> getFullyQualifiedNames(Collection<JavaClass> implementedInterfaces) {
+         ArrayList<String> l = new ArrayList<String>();
+         for (JavaClass implementedInterface : implementedInterfaces) {
+             l.add(implementedInterface.getFullyQualifiedName());
+@@ -395,19 +420,19 @@ public class QdoxMappingLoader implements MappingLoader {
+         return defaultDescription;
+     }
+ 
+-    private AttributeMapping loadParameter(JavaParameter parameter) {
++    private AttributeMapping loadParameter(JavaParameter parameter, JavaModel methodOrConstructor) {
+         String parameterName = parameter.getName();
+         String parameterDescription = getParameterDescription(parameter);
+ 
+         // first attempt to load the attribute from the java beans accessor methods
+-        JavaClass javaClass = parameter.getParentMethod().getParentClass();
++        JavaClass javaClass = parameter.getParentClass();
+         BeanProperty beanProperty = javaClass.getBeanProperty(parameterName);
+         if (beanProperty != null) {
+             AttributeMapping attributeMapping = loadAttribute(beanProperty, parameterDescription);
+             // if the attribute mapping is null, the property was tagged as hidden and this is an error
+             if (attributeMapping == null) {
+                 throw new InvalidModelException("Hidden property usage: " +
+-                        "The construction method " + toMethodLocator(parameter.getParentMethod()) +
++                        "The construction method " + toMethodLocator(parameter.getParentClass(), methodOrConstructor) +
+                         " can not use a hidded property " + parameterName);
+             }
+             return attributeMapping;
+@@ -426,9 +451,9 @@ public class QdoxMappingLoader implements MappingLoader {
+ 
+     private String getParameterDescription(JavaParameter parameter) {
+         String parameterName = parameter.getName();
+-        DocletTag[] tags = parameter.getParentMethod().getTagsByName("param");
++        Collection<DocletTag> tags = parameter.getTagsByName("param");
+         for (DocletTag tag : tags) {
+-            if (tag.getParameters()[0].equals(parameterName)) {
++            if (tag.getParameters().get(0).equals(parameterName)) {
+                 String parameterDescription = tag.getValue().trim();
+                 if (parameterDescription.startsWith(parameterName)) {
+                     parameterDescription = parameterDescription.substring(parameterName.length()).trim();
+@@ -439,18 +464,6 @@ public class QdoxMappingLoader implements MappingLoader {
+         return null;
+     }
+ 
+-    private boolean isValidConstructor(String factoryMethod, JavaMethod method, JavaParameter[] parameters) {
+-        if (!method.isPublic() || parameters.length == 0) {
+-            return false;
+-        }
+-
+-        if (factoryMethod == null) {
+-            return method.isConstructor();
+-        } else {
+-            return method.getName().equals(factoryMethod);
+-        }
+-    }
+-
+     private static String getProperty(DocletTag propertyTag, String propertyName) {
+         return getProperty(propertyTag, propertyName, null);
+     }
+@@ -477,14 +490,17 @@ public class QdoxMappingLoader implements MappingLoader {
+         return false;
+     }
+ 
+-    private org.apache.xbean.blueprint.generator.Type toMappingType(Type type, String nestedType) {
++    private org.apache.xbean.blueprint.generator.Type toMappingType(JavaType type, String nestedType) {
+         try {
+-            if (type.isArray()) {
+-                return org.apache.xbean.blueprint.generator.Type.newArrayType(type.getValue(), type.getDimensions());
+-            } else if (type.isA(collectionType)) {
+-                if (nestedType == null) nestedType = "java.lang.Object";
+-                return org.apache.xbean.blueprint.generator.Type.newCollectionType(type.getValue(),
+-                        org.apache.xbean.blueprint.generator.Type.newSimpleType(nestedType));
++	    if (type instanceof JavaClass) {
++                JavaClass clazz = (JavaClass)type;
++                if (clazz.isArray()) {
++                    return org.apache.xbean.blueprint.generator.Type.newArrayType(type.getValue(), clazz.getDimensions());
++                } else if (clazz.isA(collectionType)) {
++                    if (nestedType == null) nestedType = "java.lang.Object";
++                    return org.apache.xbean.blueprint.generator.Type.newCollectionType(type.getValue(),
++                            org.apache.xbean.blueprint.generator.Type.newSimpleType(nestedType));
++                }
+             }
+         } catch (Throwable t) {
+             log.debug("Could not load type mapping", t);
+@@ -492,26 +508,28 @@ public class QdoxMappingLoader implements MappingLoader {
+         return org.apache.xbean.blueprint.generator.Type.newSimpleType(type.getValue());
+     }
+ 
+-    private static String toMethodLocator(JavaMethod method) {
++    private static String toMethodLocator(JavaClass parentClass, JavaModel methodOrConstructor) {
++        JavaMethod method = methodOrConstructor instanceof JavaMethod ? (JavaMethod) methodOrConstructor : null;
++        JavaConstructor constructor = methodOrConstructor instanceof JavaConstructor ? (JavaConstructor) methodOrConstructor : null;
+         StringBuffer buf = new StringBuffer();
+-        buf.append(method.getParentClass().getFullyQualifiedName());
+-        if (!method.isConstructor()) {
++        buf.append(parentClass.getFullyQualifiedName());
++        if (method != null) {
+             buf.append(".").append(method.getName());
+         }
+         buf.append("(");
+-        JavaParameter[] parameters = method.getParameters();
+-        for (int i = 0; i < parameters.length; i++) {
+-            JavaParameter parameter = parameters[i];
++        List<JavaParameter> parameters = method != null ? method.getParameters() : constructor.getParameters();
++        for (int i = 0; i < parameters.size(); i++) {
++            JavaParameter parameter = parameters.get(i);
+             if (i > 0) {
+                 buf.append(", ");
+             }
+             buf.append(parameter.getName());
+         }
+-        buf.append(") : ").append(method.getLineNumber());
++        buf.append(") : ").append(method != null ? method.getLineNumber() : constructor.getLineNumber());
+         return buf.toString();
+     }
+ 
+-    private static void getSourceFiles(File base, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void getSourceFiles(File base, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         if (base.isDirectory()) {
+             listAllFileNames(base, "", excludedClasses, builder);
+         } else {
+@@ -519,7 +537,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+     }
+ 
+-    private static void listAllFileNames(File base, String prefix, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void listAllFileNames(File base, String prefix, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         if (!base.canRead() || !base.isDirectory()) {
+             throw new IllegalArgumentException(base.getAbsolutePath());
+         }
+@@ -536,7 +554,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+     }
+ 
+-    private static void listAllJarEntries(File base, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void listAllJarEntries(File base, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         JarFile jarFile = new JarFile(base);
+         for (Enumeration entries = jarFile.entries(); entries.hasMoreElements(); ) {
+             JarEntry entry = (JarEntry) entries.nextElement();
+diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/generator/QdoxMappingLoader.java b/xbean-spring/src/main/java/org/apache/xbean/spring/generator/QdoxMappingLoader.java
+index 94bd7a1..228117e 100644
+--- a/xbean-spring/src/main/java/org/apache/xbean/spring/generator/QdoxMappingLoader.java
++++ b/xbean-spring/src/main/java/org/apache/xbean/spring/generator/QdoxMappingLoader.java
+@@ -20,6 +20,7 @@ import java.io.File;
+ import java.io.IOException;
+ import java.net.URL;
+ import java.util.ArrayList;
++import java.util.Collection;
+ import java.util.Collections;
+ import java.util.Enumeration;
+ import java.util.HashMap;
+@@ -31,14 +32,17 @@ import java.util.TreeSet;
+ import java.util.jar.JarEntry;
+ import java.util.jar.JarFile;
+ 
+-import com.thoughtworks.qdox.JavaDocBuilder;
++import com.thoughtworks.qdox.JavaProjectBuilder;
+ import com.thoughtworks.qdox.model.BeanProperty;
+ import com.thoughtworks.qdox.model.DocletTag;
+ import com.thoughtworks.qdox.model.JavaClass;
++import com.thoughtworks.qdox.model.JavaConstructor;
+ import com.thoughtworks.qdox.model.JavaMethod;
++import com.thoughtworks.qdox.model.JavaModel;
+ import com.thoughtworks.qdox.model.JavaParameter;
+ import com.thoughtworks.qdox.model.JavaSource;
+-import com.thoughtworks.qdox.model.Type;
++import com.thoughtworks.qdox.model.JavaType;
++
+ import org.apache.commons.logging.Log;
+ import org.apache.commons.logging.LogFactory;
+ 
+@@ -62,7 +66,7 @@ public class QdoxMappingLoader implements MappingLoader {
+     private final String defaultNamespace;
+     private final File[] srcDirs;
+     private final String[] excludedClasses;
+-    private Type collectionType;
++    private JavaClass collectionType;
+ 
+     public QdoxMappingLoader(String defaultNamespace, File[] srcDirs, String[] excludedClasses) {
+         this.defaultNamespace = defaultNamespace;
+@@ -79,7 +83,7 @@ public class QdoxMappingLoader implements MappingLoader {
+     }
+ 
+     public Set<NamespaceMapping> loadNamespaces() throws IOException {
+-        JavaDocBuilder builder = new JavaDocBuilder();
++        JavaProjectBuilder builder = new JavaProjectBuilder();
+ 
+         log.debug("Source directories: ");
+ 
+@@ -92,11 +96,11 @@ public class QdoxMappingLoader implements MappingLoader {
+             getSourceFiles(sourceDirectory, excludedClasses, builder);
+         }
+ 
+-        collectionType = builder.getClassByName("java.util.Collection").asType();
++        collectionType = builder.getClassByName("java.util.Collection");
+         return loadNamespaces(builder);
+     }
+ 
+-    private Set<NamespaceMapping> loadNamespaces(JavaDocBuilder builder) {
++    private Set<NamespaceMapping> loadNamespaces(JavaProjectBuilder builder) {
+         // load all of the elements
+         List<ElementMapping> elements = loadElements(builder);
+ 
+@@ -131,14 +135,14 @@ public class QdoxMappingLoader implements MappingLoader {
+         return Collections.unmodifiableSet(namespaces);
+     }
+ 
+-    private List<ElementMapping> loadElements(JavaDocBuilder builder) {
+-        JavaSource[] javaSources = builder.getSources();
++    private List<ElementMapping> loadElements(JavaProjectBuilder builder) {
++        Collection<JavaSource> javaSources = builder.getSources();
+         List<ElementMapping> elements = new ArrayList<ElementMapping>();
+         for (JavaSource javaSource : javaSources) {
+-            if (javaSource.getClasses().length == 0) {
++            if (javaSource.getClasses().isEmpty()) {
+                 log.info("No Java Classes defined in: " + javaSource.getURL());
+             } else {
+-                JavaClass[] classes = javaSource.getClasses();
++                Collection<JavaClass> classes = javaSource.getClasses();
+                 for (JavaClass javaClass : classes) {
+                     ElementMapping element = loadElement(builder, javaClass);
+                     if (element != null && !javaClass.isAbstract()) {
+@@ -152,7 +156,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         return elements;
+     }
+ 
+-    private ElementMapping loadElement(JavaDocBuilder builder, JavaClass javaClass) {
++    private ElementMapping loadElement(JavaProjectBuilder builder, JavaClass javaClass) {
+         DocletTag xbeanTag = javaClass.getTagByName(XBEAN_ANNOTATION);
+         if (xbeanTag == null) {
+             return null;
+@@ -176,7 +180,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         Map<String, AttributeMapping> attributesByPropertyName = new HashMap<String, AttributeMapping>();
+ 
+         for (JavaClass jClass = javaClass; jClass != null; jClass = jClass.getSuperJavaClass()) {
+-            BeanProperty[] beanProperties = jClass.getBeanProperties();
++            Collection<BeanProperty> beanProperties = jClass.getBeanProperties();
+             for (BeanProperty beanProperty : beanProperties) {
+                 // we only care about properties with a setter
+                 if (beanProperty.getMutator() != null) {
+@@ -219,9 +223,9 @@ public class QdoxMappingLoader implements MappingLoader {
+         String destroyMethod = null;
+         String factoryMethod = null;
+         for (JavaClass jClass = javaClass; jClass != null; jClass = jClass.getSuperJavaClass()) {
+-            JavaMethod[] methods = javaClass.getMethods();
++            Collection<JavaMethod> methods = javaClass.getMethods();
+             for (JavaMethod method : methods) {
+-                if (method.isPublic() && !method.isConstructor()) {
++                if (method.isPublic()) {
+                     if (initMethod == null && method.getTagByName(INIT_METHOD_ANNOTATION) != null) {
+                         initMethod = method.getName();
+                     }
+@@ -237,27 +241,48 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+ 
+         List<List<ParameterMapping>> constructorArgs = new ArrayList<List<ParameterMapping>>();
+-        JavaMethod[] methods = javaClass.getMethods();
+-        for (JavaMethod method : methods) {
+-            JavaParameter[] parameters = method.getParameters();
+-            if (isValidConstructor(factoryMethod, method, parameters)) {
+-                List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.length);
+-                for (JavaParameter parameter : parameters) {
+-                    AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
+-                    if (attributeMapping == null) {
+-                        attributeMapping = loadParameter(parameter);
+-
+-                        attributes.add(attributeMapping);
+-                        attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++        if (factoryMethod == null) {
++            Collection<JavaConstructor> constructors = javaClass.getConstructors();
++            for (JavaConstructor constructor : constructors) {
++                Collection<JavaParameter> parameters = constructor.getParameters();
++                if (constructor.isPublic() && parameters.size() > 0) {
++                    List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.size());
++                    for (JavaParameter parameter : parameters) {
++                        AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
++                        if (attributeMapping == null) {
++                            attributeMapping = loadParameter(parameter, constructor);
++
++                            attributes.add(attributeMapping);
++                            attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++                        }
++                        args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
+                     }
+-                    args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
++                    constructorArgs.add(Collections.unmodifiableList(args));
++                }
++            }
++        } else {
++            Collection<JavaMethod> methods = javaClass.getMethods();
++            for (JavaMethod method : methods) {
++                Collection<JavaParameter> parameters = method.getParameters();
++                if (method.isPublic() && parameters.size() > 0 && method.getName().equals(factoryMethod)) {
++                    List<ParameterMapping> args = new ArrayList<ParameterMapping>(parameters.size());
++                    for (JavaParameter parameter : parameters) {
++                        AttributeMapping attributeMapping = attributesByPropertyName.get(parameter.getName());
++                        if (attributeMapping == null) {
++                            attributeMapping = loadParameter(parameter, method);
++
++                            attributes.add(attributeMapping);
++                            attributesByPropertyName.put(attributeMapping.getPropertyName(), attributeMapping);
++                        }
++                        args.add(new ParameterMapping(attributeMapping.getPropertyName(), toMappingType(parameter.getType(), null)));
++                    }
++                    constructorArgs.add(Collections.unmodifiableList(args));
+                 }
+-                constructorArgs.add(Collections.unmodifiableList(args));
+             }
+         }
+ 
+         HashSet<String> interfaces = new HashSet<String>();
+-        interfaces.addAll(getFullyQualifiedNames(javaClass.getImplementedInterfaces()));
++        interfaces.addAll(getFullyQualifiedNames(javaClass.getInterfaces()));
+ 
+         JavaClass actualClass = javaClass;
+         if (factoryClass != null) {
+@@ -282,7 +307,7 @@ public class QdoxMappingLoader implements MappingLoader {
+             }
+             p = s;
+             superClasses.add(p.getFullyQualifiedName());
+-            interfaces.addAll(getFullyQualifiedNames(p.getImplementedInterfaces()));
++            interfaces.addAll(getFullyQualifiedNames(p.getInterfaces()));
+         }
+ 
+         return new ElementMapping(namespace,
+@@ -303,7 +328,7 @@ public class QdoxMappingLoader implements MappingLoader {
+                 interfaces);
+     }
+ 
+-    private List<String> getFullyQualifiedNames(JavaClass[] implementedInterfaces) {
++    private List<String> getFullyQualifiedNames(Collection<JavaClass> implementedInterfaces) {
+         ArrayList<String> l = new ArrayList<String>();
+         for (JavaClass implementedInterface : implementedInterfaces) {
+             l.add(implementedInterface.getFullyQualifiedName());
+@@ -395,19 +420,19 @@ public class QdoxMappingLoader implements MappingLoader {
+         return defaultDescription;
+     }
+ 
+-    private AttributeMapping loadParameter(JavaParameter parameter) {
++    private AttributeMapping loadParameter(JavaParameter parameter, JavaModel methodOrConstructor) {
+         String parameterName = parameter.getName();
+         String parameterDescription = getParameterDescription(parameter);
+ 
+         // first attempt to load the attribute from the java beans accessor methods
+-        JavaClass javaClass = parameter.getParentMethod().getParentClass();
++        JavaClass javaClass = parameter.getDeclaringClass();
+         BeanProperty beanProperty = javaClass.getBeanProperty(parameterName);
+         if (beanProperty != null) {
+             AttributeMapping attributeMapping = loadAttribute(beanProperty, parameterDescription);
+             // if the attribute mapping is null, the property was tagged as hidden and this is an error
+             if (attributeMapping == null) {
+                 throw new InvalidModelException("Hidden property usage: " +
+-                        "The construction method " + toMethodLocator(parameter.getParentMethod()) +
++                        "The construction method " + toMethodLocator(parameter.getDeclaringClass(), methodOrConstructor) +
+                         " can not use a hidded property " + parameterName);
+             }
+             return attributeMapping;
+@@ -426,9 +451,9 @@ public class QdoxMappingLoader implements MappingLoader {
+ 
+     private String getParameterDescription(JavaParameter parameter) {
+         String parameterName = parameter.getName();
+-        DocletTag[] tags = parameter.getParentMethod().getTagsByName("param");
++        Collection<DocletTag> tags = parameter.getTagsByName("param");
+         for (DocletTag tag : tags) {
+-            if (tag.getParameters()[0].equals(parameterName)) {
++            if (tag.getParameters().get(0).equals(parameterName)) {
+                 String parameterDescription = tag.getValue().trim();
+                 if (parameterDescription.startsWith(parameterName)) {
+                     parameterDescription = parameterDescription.substring(parameterName.length()).trim();
+@@ -439,18 +464,6 @@ public class QdoxMappingLoader implements MappingLoader {
+         return null;
+     }
+ 
+-    private boolean isValidConstructor(String factoryMethod, JavaMethod method, JavaParameter[] parameters) {
+-        if (!method.isPublic() || parameters.length == 0) {
+-            return false;
+-        }
+-
+-        if (factoryMethod == null) {
+-            return method.isConstructor();
+-        } else {
+-            return method.getName().equals(factoryMethod);
+-        }
+-    }
+-
+     private static String getProperty(DocletTag propertyTag, String propertyName) {
+         return getProperty(propertyTag, propertyName, null);
+     }
+@@ -477,14 +490,17 @@ public class QdoxMappingLoader implements MappingLoader {
+         return false;
+     }
+ 
+-    private org.apache.xbean.spring.generator.Type toMappingType(Type type, String nestedType) {
++    private org.apache.xbean.spring.generator.Type toMappingType(JavaType type, String nestedType) {
+         try {
+-            if (type.isArray()) {
+-                return org.apache.xbean.spring.generator.Type.newArrayType(type.getValue(), type.getDimensions());
+-            } else if (type.isA(collectionType)) {
+-                if (nestedType == null) nestedType = "java.lang.Object";
+-                return org.apache.xbean.spring.generator.Type.newCollectionType(type.getValue(),
+-                        org.apache.xbean.spring.generator.Type.newSimpleType(nestedType));
++	    if (type instanceof JavaClass) {
++                JavaClass clazz = (JavaClass)type;
++                if (clazz.isArray()) {
++                    return org.apache.xbean.spring.generator.Type.newArrayType(type.getValue(), clazz.getDimensions());
++                } else if (clazz.isA(collectionType)) {
++                    if (nestedType == null) nestedType = "java.lang.Object";
++                    return org.apache.xbean.spring.generator.Type.newCollectionType(type.getValue(),
++                            org.apache.xbean.spring.generator.Type.newSimpleType(nestedType));
++                }
+             }
+         } catch (Throwable t) {
+             log.debug("Could not load type mapping", t);
+@@ -492,26 +508,28 @@ public class QdoxMappingLoader implements MappingLoader {
+         return org.apache.xbean.spring.generator.Type.newSimpleType(type.getValue());
+     }
+ 
+-    private static String toMethodLocator(JavaMethod method) {
++    private static String toMethodLocator(JavaClass parentClass, JavaModel methodOrConstructor) {
++        JavaMethod method = methodOrConstructor instanceof JavaMethod ? (JavaMethod) methodOrConstructor : null;
++        JavaConstructor constructor = methodOrConstructor instanceof JavaConstructor ? (JavaConstructor) methodOrConstructor : null;
+         StringBuffer buf = new StringBuffer();
+-        buf.append(method.getParentClass().getFullyQualifiedName());
+-        if (!method.isConstructor()) {
++        buf.append(parentClass.getFullyQualifiedName());
++        if (method != null) {
+             buf.append(".").append(method.getName());
+         }
+         buf.append("(");
+-        JavaParameter[] parameters = method.getParameters();
+-        for (int i = 0; i < parameters.length; i++) {
+-            JavaParameter parameter = parameters[i];
++        List<JavaParameter> parameters = method != null ? method.getParameters() : constructor.getParameters();
++        for (int i = 0; i < parameters.size(); i++) {
++            JavaParameter parameter = parameters.get(i);
+             if (i > 0) {
+                 buf.append(", ");
+             }
+             buf.append(parameter.getName());
+         }
+-        buf.append(") : ").append(method.getLineNumber());
++        buf.append(") : ").append(method != null ? method.getLineNumber() : constructor.getLineNumber());
+         return buf.toString();
+     }
+ 
+-    private static void getSourceFiles(File base, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void getSourceFiles(File base, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         if (base.isDirectory()) {
+             listAllFileNames(base, "", excludedClasses, builder);
+         } else {
+@@ -519,7 +537,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+     }
+ 
+-    private static void listAllFileNames(File base, String prefix, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void listAllFileNames(File base, String prefix, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         if (!base.canRead() || !base.isDirectory()) {
+             throw new IllegalArgumentException(base.getAbsolutePath());
+         }
+@@ -536,7 +554,7 @@ public class QdoxMappingLoader implements MappingLoader {
+         }
+     }
+ 
+-    private static void listAllJarEntries(File base, String[] excludedClasses, JavaDocBuilder builder) throws IOException {
++    private static void listAllJarEntries(File base, String[] excludedClasses, JavaProjectBuilder builder) throws IOException {
+         JarFile jarFile = new JarFile(base);
+         for (Enumeration entries = jarFile.entries(); entries.hasMoreElements(); ) {
+             JarEntry entry = (JarEntry) entries.nextElement();
+diff --git a/xbean-spring/src/main/java/org/apache/xbean/spring/generator/Type.java b/xbean-spring/src/main/java/org/apache/xbean/spring/generator/Type.java
+index 5eac64c..0d9fa63 100644
+--- a/xbean-spring/src/main/java/org/apache/xbean/spring/generator/Type.java
++++ b/xbean-spring/src/main/java/org/apache/xbean/spring/generator/Type.java
+@@ -41,12 +41,7 @@ public class Type {
+     public static Type newArrayType(String type, int dimensions) {
+         if (type == null) throw new NullPointerException("type");
+         if (dimensions < 1) throw new IllegalArgumentException("dimensions must be atleast one");
+-        StringBuffer buf = new StringBuffer(type.length() + (dimensions * 2));
+-        buf.append(type);
+-        for (int i = 0; i < dimensions; i ++) {
+-            buf.append("[]");
+-        }
+-        return new Type(buf.toString(), newSimpleType(type));
++        return new Type(type, newSimpleType(type.replaceAll("\\[\\]", "")));
+     }
+ 
+     public static Type newCollectionType(String collectionType, Type elementType) {
+-- 
+2.9.3
+
diff --git a/SPECS/xbean.spec b/SPECS/xbean.spec
new file mode 100644
index 0000000..99f516b
--- /dev/null
+++ b/SPECS/xbean.spec
@@ -0,0 +1,355 @@
+# Conditionals to help breaking eclipse <-> xbean dependency cycle
+# when bootstrapping for new architectures
+%bcond_without equinox
+%bcond_without groovy
+%bcond_without spring
+
+Name:           xbean
+Version:        4.8
+Release:        1%{?dist}
+Summary:        Java plugin based web server
+License:        ASL 2.0
+URL:            http://geronimo.apache.org/xbean/
+BuildArch:      noarch
+
+Source0:        http://repo2.maven.org/maven2/org/apache/%{name}/%{name}/%{version}/%{name}-%{version}-source-release.zip
+
+# Compatibility with Eclipse Luna (rhbz#1087461)
+Patch1:         0002-Port-to-Eclipse-Luna-OSGi.patch
+Patch2:         0003-Port-to-QDox-2.0.patch
+
+BuildRequires:  maven-local
+BuildRequires:  mvn(commons-logging:commons-logging-api)
+BuildRequires:  mvn(log4j:log4j:1.2.12)
+BuildRequires:  mvn(org.apache.felix:maven-bundle-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-source-plugin)
+BuildRequires:  mvn(org.osgi:org.osgi.core)
+BuildRequires:  mvn(org.ow2.asm:asm)
+BuildRequires:  mvn(org.ow2.asm:asm-commons)
+BuildRequires:  mvn(org.slf4j:slf4j-api)
+
+%if %{with equinox}
+BuildRequires:  mvn(org.eclipse:osgi)
+%endif
+
+%if %{with groovy}
+BuildRequires:  mvn(org.codehaus.groovy:groovy-all)
+%endif
+
+%if %{with spring}
+BuildRequires:  mvn(ant:ant)
+BuildRequires:  mvn(commons-logging:commons-logging)
+BuildRequires:  mvn(com.thoughtworks.qdox:qdox)
+BuildRequires:  mvn(org.apache.maven:maven-archiver)
+BuildRequires:  mvn(org.apache.maven:maven-artifact)
+BuildRequires:  mvn(org.apache.maven:maven-plugin-api)
+BuildRequires:  mvn(org.apache.maven:maven-project)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-antrun-plugin)
+BuildRequires:  mvn(org.apache.maven.plugins:maven-plugin-plugin)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-archiver)
+BuildRequires:  mvn(org.codehaus.plexus:plexus-utils)
+BuildRequires:  mvn(org.springframework:spring-beans)
+BuildRequires:  mvn(org.springframework:spring-context)
+BuildRequires:  mvn(org.springframework:spring-web)
+%endif
+
+%description
+The goal of XBean project is to create a plugin based server
+analogous to Eclipse being a plugin based IDE. XBean will be able to
+discover, download and install server plugins from an Internet based
+repository. In addition, we include support for multiple IoC systems,
+support for running with no IoC system, JMX without JMX code,
+lifecycle and class loader management, and a rock solid Spring
+integration.
+
+%if %{with spring}
+# For now blueprint module fails to compile. Disable it.
+%if 0
+%package        blueprint
+Summary:        Schema-driven namespace handler for Apache Aries Blueprint
+
+%description    blueprint
+This package provides %{summary}.
+%endif
+
+%package        classloader
+Summary:        A flexibie multi-parent classloader
+
+%description    classloader
+This package provides %{summary}.
+
+%package        spring
+Summary:        Schema-driven namespace handler for spring contexts
+Requires:       %{name} = %{version}-%{release}
+
+%description    spring
+This package provides %{summary}.
+
+%package        -n maven-%{name}-plugin
+Summary:        XBean plugin for Apache Maven
+
+%description    -n maven-%{name}-plugin
+This package provides %{summary}.
+%endif
+
+%package        javadoc
+Summary:        API documentation for %{name}
+
+%description    javadoc
+This package provides %{summary}.
+
+%prep
+%setup -q
+# build failing on this due to doxia-sitetools problems
+rm src/site/site.xml
+
+%if %{with equinox}
+%patch1 -p1
+%endif
+%patch2 -p1
+
+%pom_remove_parent
+%pom_remove_dep mx4j:mx4j
+
+# Unshade ASM
+%pom_remove_dep -r :xbean-asm6-shaded
+%pom_remove_dep -r :xbean-finder-shaded
+%pom_disable_module xbean-asm6-shaded
+%pom_disable_module xbean-finder-shaded
+%pom_add_dep org.apache.xbean:xbean-asm-util:%{version} xbean-reflect
+%pom_xpath_remove pom:optional xbean-reflect xbean-asm-util
+%pom_xpath_remove 'pom:scope[text()="provided"]' xbean-reflect xbean-asm-util
+sed -i 's/org\.apache\.xbean\.asm6/org.objectweb.asm/g' `find xbean-reflect -name '*.java'`
+
+# Prevent modules depending on springframework from building.
+%if %{without spring}
+   %pom_remove_dep org.springframework:
+   #%%pom_disable_module xbean-blueprint
+   %pom_disable_module xbean-classloader
+   %pom_disable_module xbean-spring
+   %pom_disable_module maven-xbean-plugin
+%else
+   %mvn_package :xbean-classloader classloader
+   %mvn_package :xbean-spring spring
+   %mvn_package :maven-xbean-plugin maven-xbean-plugin
+%endif
+# blueprint FTBFS, disable for now
+%pom_disable_module xbean-blueprint
+
+%if %{without equinox}
+  %pom_remove_dep :xbean-bundleutils xbean-finder
+  rm -r xbean-finder/src/main/java/org/apache/xbean/finder{,/archive}/Bundle*
+  %pom_disable_module xbean-bundleutils
+%endif
+
+%if %{without groovy}
+%pom_disable_module xbean-telnet
+%endif
+
+# maven-xbean-plugin invocation makes no sense as there are no namespaces
+%pom_remove_plugin :maven-xbean-plugin xbean-classloader
+
+# As auditing tool RAT is useful for upstream only.
+%pom_remove_plugin :apache-rat-plugin
+
+# disable copy of internal aries-blueprint
+sed -i "s|<Private-Package>|<!--Private-Package>|" xbean-blueprint/pom.xml
+sed -i "s|</Private-Package>|</Private-Package-->|" xbean-blueprint/pom.xml
+
+%build
+%mvn_build -f
+
+%install
+%mvn_install
+
+%files -f .mfiles
+%doc LICENSE NOTICE
+%dir %{_javadir}/%{name}
+
+%if %{with spring}
+%if 0
+%files blueprint -f .mfiles-blueprint
+%doc LICENSE NOTICE %{name}-blueprint/target/restaurant.xsd*
+%endif
+
+%files classloader -f .mfiles-classloader
+%doc LICENSE NOTICE
+
+%files spring -f .mfiles-spring
+%doc LICENSE NOTICE
+
+%files -n maven-%{name}-plugin -f .mfiles-maven-%{name}-plugin
+%doc LICENSE NOTICE
+%endif
+
+%files javadoc -f .mfiles-javadoc
+%doc LICENSE NOTICE
+
+%changelog
+* Thu Apr 19 2018 Michael Simacek <msimacek@redhat.com> - 4.8-1
+- Update to upstream version 4.8
+
+* Tue Mar 13 2018 Michael Simacek <msimacek@redhat.com> - 4.6-1
+- Update to upstream version 4.6
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 4.5-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.5-8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 4.5-7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb  1 2017 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5-6
+- Introduce groovy build conditional
+
+* Wed Feb 01 2017 Michael Simacek <msimacek@redhat.com> - 4.5-5
+- Fix build with conditionals
+
+* Wed Feb 01 2017 Michael Simacek <msimacek@redhat.com> - 4.5-4
+- Port to current QDox
+
+* Thu Jun 16 2016 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.5-3
+- Add missing build-requires
+
+* Thu May 12 2016 Michael Simacek <msimacek@redhat.com> - 4.5-2
+- Enable xbean-asm-util
+
+* Mon May 02 2016 Michael Simacek <msimacek@redhat.com> - 4.5-1
+- Update to upstream version 4.5
+
+* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 4.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Tue Nov 24 2015 Michael Simacek <msimacek@redhat.com> - 4.4-1
+- Update to upstream version 4.4
+- Rebase patches
+- Remove obsolete groovy patch
+
+* Mon Jul 13 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.3-1
+- Update to upstream version 4.3
+
+* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 4.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Apr  1 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.2-1
+- Update to upstream version 4.2
+
+* Thu Feb  5 2015 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.1-2
+- Fix patch unshading ASM
+
+* Fri Nov 21 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 4.1-1
+- Update to upstream version 4.1
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.17-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Mon Apr 14 2014 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.17-1
+- Update to upstream version 3.17
+- Add patch for Eclipse Luna
+
+* Thu Dec  5 2013 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.16-1
+- Update to upstream version 3.16
+
+* Thu Aug 08 2013 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.13-4
+- Update to latest packaging guidelines
+
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.13-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Mon Apr 29 2013 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.13-2
+- Remove unneeded BR: maven-idea-plugin
+
+* Fri Mar 15 2013 Michal Srb <msrb@redhat.com> - 3.13-1
+- Update to upstream version 3.13
+
+* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.12-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Wed Feb 06 2013 Java SIG <java-devel@lists.fedoraproject.org> - 3.12-5
+- Update for https://fedoraproject.org/wiki/Fedora_19_Maven_Rebuild
+- Replace maven BuildRequires with maven-local
+
+* Mon Dec 17 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.12-4
+- Enable xbean-spring, resolves rhbz#887496
+- Disable xbean-blueprint due to FTBFS
+
+* Mon Oct 22 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.12-3
+- Replace eclipse-rcp requires with eclipse-equinox-osgi
+- Reenable Equinox
+
+* Tue Oct 16 2012 gil cattaneo <puntogil@libero.it> - 3.12-2
+- Enable xbean-blueprint and xbean-classloader modules
+
+* Wed Oct 10 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.12-1
+- Update to upstream version 3.12
+
+* Wed Oct 10 2012 Krzysztof Daniel <kdaniel@redhat.com> 3.11.1-8
+- Revert previous changes.
+
+* Wed Oct 10 2012 Krzysztof Daniel <kdaniel@redhat.com> 3.11.1-7
+- Disable parts dependent on Eclipse (for bootstraping purpose).
+
+* Wed Oct 10 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.11.1-6
+- Implement equinox and spring conditionals
+
+* Mon Sep  3 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.11.1-5
+- Fix eclipse requires
+
+* Mon Aug 27 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.11.1-4
+- Fix felix-framework enabling patch
+
+* Mon Aug  6 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.11.1-3
+- Enable xbean-spring
+- Enable maven-xbean-plugin
+- Remove RPM bug workaround
+
+* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.11.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jul 13 2012 Mikolaj Izdebski <mizdebsk@redhat.com> - 3.11.1-1
+- Update to the upstream version 3.11.1
+- Force use of Equinox instead of Felix
+- Convert patch to POM macros
+
+* Thu May  3 2012 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.8-5
+- Remove mx4j from deps (javax.management provided by JDK 1.5+)
+
+* Tue Apr 24 2012 Alexander Kurtakov <akurtako@redhat.com> 3.8-4
+- BR felix-framework instead of felix-osgi-core.
+
+* Tue Apr 24 2012 Alexander Kurtakov <akurtako@redhat.com> 3.8-3
+- Do not build equinox specific parts for RHEL.
+
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.8-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Tue Dec  6 2011 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.8-1
+- Update to latest upstream version
+- Build with maven 3
+- Packaging & guidelines fixes
+
+* Sat May 28 2011 Marek Goldmann <mgoldman@redhat.com> - 3.7-7
+- Added xbean-finder and xbean-bundleutils submodules
+
+* Fri Mar  4 2011 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.7-6
+- Add comment for removing javadoc
+- Fix maven 3 build
+
+* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.7-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Dec  6 2010 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.7-4
+- Fix pom filename (Resolves rhbz#655827)
+- Add depmap for main pom file
+- Fixes according to new guidelines (versionless jars, javadocs)
+
+* Fri Jul 30 2010 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.7-3
+- Use javadoc:aggregate to generate javadocs
+
+* Fri Jul  9 2010 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.7-2
+- Add license to javadoc subpackage
+
+* Mon Jun 21 2010 Stanislav Ochotnicky <sochotnicky@redhat.com> - 3.7-1
+- First release