Author: sseifert
Date: Sat May 16 09:06:05 2015
New Revision: 1679711
URL: http://svn.apache.org/r1679711
Log:
SLING-4718 Support OSGi component name different from implementation class
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
Modified:
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java?rev=1679711&r1=1679710&r2=1679711&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java
Sat May 16 09:06:05 2015
@@ -198,16 +198,24 @@ final class OsgiMetadataUtil {
}
}
}
+
+ /**
+ * @param clazz OSGi component
+ * @return XPath query fragment to find matching XML node in SCR metadata
+ */
+ private static String getComponentXPathQuery(Class clazz) {
+ return "//*[implementation/@class='" + clazz.getName() + "' or
@name='" + clazz.getName() + "']";
+ }
private static boolean matchesService(Class clazz, Document metadata) {
- String query = "//*[@name='" + clazz.getName() + "']";
+ String query = getComponentXPathQuery(clazz);
NodeList nodes = queryNodes(metadata, query);
return nodes != null && nodes.getLength() > 0;
}
private static Set<String> getServiceInterfaces(Class clazz, Document
metadata) {
Set<String> serviceInterfaces = new HashSet<String>();
- String query = "//*[@name='" + clazz.getName() +
"']/service/provide[@interface!='']";
+ String query = getComponentXPathQuery(clazz) +
"/service/provide[@interface!='']";
NodeList nodes = queryNodes(metadata, query);
if (nodes != null) {
for (int i = 0; i < nodes.getLength(); i++) {
@@ -223,7 +231,7 @@ final class OsgiMetadataUtil {
private static Map<String, Object> getProperties(Class clazz, Document
metadata) {
Map<String, Object> props = new HashMap<String, Object>();
- String query = "//*[@name='" + clazz.getName() +
"']/property[@name!='' and @value!='']";
+ String query = getComponentXPathQuery(clazz) + "/property[@name!=''
and @value!='']";
NodeList nodes = queryNodes(metadata, query);
if (nodes != null) {
for (int i = 0; i < nodes.getLength(); i++) {
@@ -238,7 +246,7 @@ final class OsgiMetadataUtil {
}
}
}
- query = "//*[@name='" + clazz.getName() + "']/property[@name!='' and
text()!='']";
+ query = getComponentXPathQuery(clazz) + "/property[@name!='' and
text()!='']";
nodes = queryNodes(metadata, query);
if (nodes != null) {
for (int i = 0; i < nodes.getLength(); i++) {
@@ -256,7 +264,7 @@ final class OsgiMetadataUtil {
private static List<Reference> getReferences(Class clazz, Document
metadata) {
List<Reference> references = new ArrayList<Reference>();
- String query = "//*[@name='" + clazz.getName() +
"']/reference[@name!='']";
+ String query = getComponentXPathQuery(clazz) + "/reference[@name!='']";
NodeList nodes = queryNodes(metadata, query);
if (nodes != null) {
for (int i = 0; i < nodes.getLength(); i++) {
@@ -268,7 +276,7 @@ final class OsgiMetadataUtil {
}
private static String getLifecycleMethodName(Class clazz, Document
metadata, String methodName) {
- String query = "//*[@name='" + clazz.getName() + "']";
+ String query = getComponentXPathQuery(clazz);
Node node = queryNode(metadata, query);
if (node != null) {
return getAttributeValue(node, methodName);
Modified:
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml?rev=1679711&r1=1679710&r2=1679711&view=diff
==============================================================================
---
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
(original)
+++
sling/trunk/testing/mocks/osgi-mock/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml
Sat May 16 09:06:05 2015
@@ -43,7 +43,7 @@
<reference name="reference2"
interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface2"
cardinality="1..n" policy="dynamic" bind="bindReference2"
unbind="unbindReference2"/>
<reference name="reference3"
interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface3"
cardinality="0..n" policy="dynamic" bind="bindReference3"
unbind="unbindReference3"/>
</scr:component>
- <scr:component
name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service4">
+ <scr:component
name="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service4_other_name">
<implementation
class="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service4"/>
<property name="service.pid"
value="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$Service4"/>
<reference name="customName"
interface="org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest$ServiceInterface1"
cardinality="1..1" policy="static" bind="customBind" unbind="customUnbind"/>