FELIX-4686 : If component is declared with 1.3 NS and ds.factory.enabled = true, validation error occors
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1638684 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
index a486bc6..2cc881f 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/ComponentMetadata.java
@@ -117,7 +117,7 @@
private boolean m_configurableServiceProperties;
private boolean m_persistentFactoryComponent;
private boolean m_deleteCallsModify;
- private boolean m_obsoleteFactoryComponentFactory;
+ private Boolean m_obsoleteFactoryComponentFactory;
private boolean m_configureWithInterfaces;
private boolean m_delayedKeepInstances;
@@ -726,7 +726,7 @@
}
public boolean isObsoleteFactoryComponentFactory() {
- return m_obsoleteFactoryComponentFactory;
+ return m_obsoleteFactoryComponentFactory == null ? false : m_obsoleteFactoryComponentFactory;
}
public boolean isConfigureWithInterfaces() {
@@ -928,7 +928,7 @@
{
throw validationFailure("Configuration with interfaces or annotations only possible with version 1.3 or later");
}
- if (m_dsVersion.isDS13() && m_obsoleteFactoryComponentFactory)
+ if (m_dsVersion.isDS13() && m_obsoleteFactoryComponentFactory != null)
{
throw validationFailure("Configuration of component factory instances through config admin factory pids supported only through the 1.2 namespace");
}
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
index 631ec01..a7be886 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/metadata/XmlHandler.java
@@ -280,7 +280,14 @@
m_currentComponent.setConfigurableServiceProperties("true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, CONFIGURABLE_SERVICE_PROPERTIES)));
m_currentComponent.setPersistentFactoryComponent("true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, PERSISTENT_FACTORY_COMPONENT)));
m_currentComponent.setDeleteCallsModify("true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, DELETE_CALLS_MODIFY)));
- m_currentComponent.setObsoleteFactoryComponentFactory(m_globalObsoleteFactoryComponentFactory || "true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, OBSOLETE_FACTORY_COMPONENT_FACTORY)));
+ if ( attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS) != null)
+ {
+ m_currentComponent.setObsoleteFactoryComponentFactory("true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, OBSOLETE_FACTORY_COMPONENT_FACTORY)));
+ }
+ else if ( !namespaceCode.isDS13() )
+ {
+ m_currentComponent.setObsoleteFactoryComponentFactory(m_globalObsoleteFactoryComponentFactory);
+ }
m_currentComponent.setConfigureWithInterfaces("true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, CONFIGURE_WITH_INTERFACES)));
m_currentComponent.setDelayedKeepInstances(m_globalDelayedKeepInstances || "true".equals(attributes.getAttribute(NAMESPACE_URI_1_0_FELIX_EXTENSIONS, DELAYED_KEEP_INSTANCES)));