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]>.

Reply via email to