Fix issue Felix-936.
Now, abstract and concrete classes can also be exposed as services is they are specified in the 'specifications' attribute.
Update package version to 1.3.0
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@743789 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/core/pom.xml b/ipojo/core/pom.xml
index 1c0b460..8f9de84 100644
--- a/ipojo/core/pom.xml
+++ b/ipojo/core/pom.xml
@@ -31,7 +31,7 @@
<version>1.3.0-SNAPSHOT</version>
<properties>
- <ipojo.package.version>1.2.0</ipojo.package.version>
+ <ipojo.package.version>1.3.0</ipojo.package.version>
</properties>
<dependencies>
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
index 4030075..91578fc 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
@@ -463,7 +463,7 @@
* Creates a PrimitiveTypeDescription object.
* @param factory the factory attached to this component type description.
*/
- public PrimitiveTypeDescription(Factory factory) {
+ public PrimitiveTypeDescription(IPojoFactory factory) {
super(factory);
}
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
index 153ad66..6da7ce2 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/HandlerManagerFactory.java
@@ -182,7 +182,7 @@
* @param factory the factory.
* @see ComponentTypeDescription#ComponentTypeDescription(Factory)
*/
- public HandlerTypeDescription(Factory factory) {
+ public HandlerTypeDescription(IPojoFactory factory) {
super(factory);
}
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
index 0813853..cb26e98 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/architecture/ComponentTypeDescription.java
@@ -23,6 +23,7 @@
import org.apache.felix.ipojo.ComponentFactory;
import org.apache.felix.ipojo.Factory;
+import org.apache.felix.ipojo.IPojoFactory;
import org.apache.felix.ipojo.metadata.Attribute;
import org.apache.felix.ipojo.metadata.Element;
import org.osgi.framework.BundleContext;
@@ -48,15 +49,23 @@
/**
* Represented factory.
*/
- private final Factory m_factory;
+ private final IPojoFactory m_factory;
/**
* Constructor.
* @param factory : represented factory.
*/
- public ComponentTypeDescription(Factory factory) {
+ public ComponentTypeDescription(IPojoFactory factory) {
m_factory = factory;
}
+
+ /**
+ * Gets the attached factory.
+ * @return the factory
+ */
+ public IPojoFactory getFactory() {
+ return m_factory;
+ }
/**
* Gets a printable form of the current component type description.
@@ -109,10 +118,7 @@
* @param pd : the property to add
*/
public void addProperty(PropertyDescription pd) { //NOPMD remove the instance name of the 'name' property.
- String name = pd.getName();
-// if ("name".equals(name)) {
-// pd = new PropertyDescription(name, pd.getType(), null); //NOPMD Instance name case.
-// }
+ String name = pd.getName();
// Check if the property is not already in the array
for (int i = 0; i < m_properties.length; i++) {
diff --git a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
index db8bbe5..5730806 100644
--- a/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
+++ b/ipojo/core/src/main/java/org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceHandler.java
@@ -41,6 +41,7 @@
import org.apache.felix.ipojo.parser.ParseException;
import org.apache.felix.ipojo.parser.ParseUtils;
import org.apache.felix.ipojo.parser.PojoMetadata;
+import org.apache.felix.ipojo.util.Logger;
import org.apache.felix.ipojo.util.Property;
import org.osgi.framework.Bundle;
@@ -511,7 +512,7 @@
PojoMetadata manipulation = getFactory().getPojoMetadata();
for (int i = 0; i < provides.length; i++) {
- // First : create the serviceSpecification list
+ // First : create the serviceSpecification list
String[] serviceSpecification = manipulation.getInterfaces();
String parent = manipulation.getSuperClass();
Set all = null;
@@ -532,8 +533,9 @@
if (serviceSpecificationStr != null) {
List itfs = ParseUtils.parseArraysAsList(serviceSpecificationStr);
for (int j = 0; j < itfs.size(); j++) {
- if (! all.contains(itfs.get(j))) {
- throw new ConfigurationException("The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname"));
+ if (! all.contains(itfs.get(j)) && ! parent.equals((String) itfs.get(i))) {
+ desc.getFactory().getLogger().log(Logger.WARNING, "The specification " + itfs.get(j) + " is not implemented by " + metadata.getAttribute("classname") +
+ " it might be a superclass.");
}
}
all = new HashSet(itfs);