This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.osgi-mock-1.3.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-osgi-mock.git
commit ad91a5b8899558ab709136a4ba77396dbbba32c9 Author: Stefan Seifert <[email protected]> AuthorDate: Sat May 16 09:06:05 2015 +0000 SLING-4718 Support OSGi component name different from implementation class git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/osgi-mock@1679711 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/testing/mock/osgi/OsgiMetadataUtil.java | 20 ++++++++++++++------ ...e.sling.testing.mock.osgi.OsgiServiceUtilTest.xml | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java b/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java index 8c2c298..f117dd6 100644 --- a/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java +++ b/src/main/java/org/apache/sling/testing/mock/osgi/OsgiMetadataUtil.java @@ -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); diff --git a/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml b/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml index 077c37e..ae8d655 100644 --- a/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml +++ b/src/test/resources/OSGI-INF/org.apache.sling.testing.mock.osgi.OsgiServiceUtilTest.xml @@ -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"/> -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
