You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2009/05/29 11:09:01 UTC

svn commit: r779897 - in /cxf/dosgi/trunk: dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ samples/greeter/client/ samples/greeter/impl/ systests/common/

Author: davidb
Date: Fri May 29 09:08:40 2009
New Revision: 779897

URL: http://svn.apache.org/viewvc?rev=779897&view=rev
Log:
Fixing problem with Client-side proxies. 
Method from java.lang.Object are now invoked on the InvocationHandler rather than sent over the wire.

Also included some small clean-ups on the greeter demo poms.

Added:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java   (with props)
Modified:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandler.java
    cxf/dosgi/trunk/samples/greeter/client/pom.xml
    cxf/dosgi/trunk/samples/greeter/impl/pom.xml
    cxf/dosgi/trunk/systests/common/pom.xml

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandler.java?rev=779897&r1=779896&r2=779897&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandler.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandler.java Fri May 29 09:08:40 2009
@@ -22,6 +22,8 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,12 +31,13 @@
 import org.osgi.framework.ServiceException;
 
 public class ServiceInvocationHandler implements InvocationHandler {
-
     private final static String REMOTE_EXCEPTION_TYPE = "REMOTE";
-    
+    private static final Collection<Method> OBJECT_METHODS = 
+        Arrays.asList(Object.class.getMethods());
+
     private Map<Method, List<Class<?>>> exceptionsMap
         = new HashMap<Method, List<Class<?>>>();
-    private Object serviceObject;    
+    private Object serviceObject;
     
     public ServiceInvocationHandler(Object serviceObject, Class<?> iType) {
         this.serviceObject = serviceObject;
@@ -42,8 +45,12 @@
     }
     
     public Object invoke(Object proxy, Method m, Object[] params) throws Throwable {
+        if (OBJECT_METHODS.contains(m)) {
+            return m.invoke(this, params);
+        }
+
         ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
-        try {
+        try {            
             Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
             return m.invoke(serviceObject, params); 
         } catch (Throwable ex) {

Added: cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java?rev=779897&view=auto
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java (added)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java Fri May 29 09:08:40 2009
@@ -0,0 +1,56 @@
+package org.apache.cxf.dosgi.dsw.handlers;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+public class ServiceInvocationHandlerTest extends TestCase {
+    private static final Map<String, Method> OBJECT_METHODS = new HashMap<String, Method>(); {
+        for (Method m : Object.class.getMethods()) {
+            OBJECT_METHODS.put(m.getName(), m);
+        }
+    }
+    
+    public void testInvoke() throws Throwable {
+        ServiceInvocationHandler sih = new ServiceInvocationHandler("hello", String.class);
+        Method m = String.class.getMethod("length", new Class [] {});
+        assertEquals(5, sih.invoke(null, m, new Object [] {}));
+    }
+    
+    public void testInvokeObjectMethod() throws Throwable {
+        final List<String> called = new ArrayList<String>();
+        ServiceInvocationHandler sih = new ServiceInvocationHandler("hi", String.class) {
+            public boolean equals(Object obj) {
+                called.add("equals");
+                return super.equals(obj);
+            }
+
+            public int hashCode() {
+                called.add("hashCode");
+                return super.hashCode();
+            }
+
+            public String toString() {
+                called.add("toString");
+                return "somestring";
+            }            
+        };
+
+        assertEquals(true, 
+                sih.invoke(null, OBJECT_METHODS.get("equals"), new Object [] {sih}));
+        assertEquals(System.identityHashCode(sih), 
+                sih.invoke(null, OBJECT_METHODS.get("hashCode"), new Object [] {}));
+        assertEquals("somestring", 
+                sih.invoke(null, OBJECT_METHODS.get("toString"), new Object [] {}));
+        assertEquals(Arrays.asList("equals", "hashCode", "toString"), called);
+//        assertEquals("This one used to throw an exception", sih, sih);
+//        assertEquals(System.identityHashCode(sih), sih.hashCode());
+//        assertEquals("somestring", sih.toString());
+        
+    }
+}

Propchange: cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/ServiceInvocationHandlerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/dosgi/trunk/samples/greeter/client/pom.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter/client/pom.xml?rev=779897&r1=779896&r2=779897&view=diff
==============================================================================
--- cxf/dosgi/trunk/samples/greeter/client/pom.xml (original)
+++ cxf/dosgi/trunk/samples/greeter/client/pom.xml Fri May 29 09:08:40 2009
@@ -38,11 +38,6 @@
     </properties>
     
     <dependencies>
-        <dependency>
-            <groupId>org.apache.cxf</groupId>
-            <artifactId>cxf-bundle-minimal</artifactId>
-            <version>${cxf.version}</version>
-        </dependency>
         <dependency> 
             <groupId>org.apache.cxf.dosgi.samples</groupId>
             <artifactId>cxf-dosgi-ri-samples-greeter-interface</artifactId>
@@ -59,16 +54,6 @@
                 </exclusion>
             </exclusions>
         </dependency> 
-        <dependency>
-           <groupId>junit</groupId>
-           <artifactId>junit</artifactId>
-           <scope>test</scope>
-        </dependency>  
-        <dependency>
-           <groupId>org.easymock</groupId>
-           <artifactId>easymockclassextension</artifactId>
-           <scope>test</scope>
-         </dependency>
     </dependencies> 
 
     <build>

Modified: cxf/dosgi/trunk/samples/greeter/impl/pom.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter/impl/pom.xml?rev=779897&r1=779896&r2=779897&view=diff
==============================================================================
--- cxf/dosgi/trunk/samples/greeter/impl/pom.xml (original)
+++ cxf/dosgi/trunk/samples/greeter/impl/pom.xml Fri May 29 09:08:40 2009
@@ -40,24 +40,20 @@
     <dependencies>
         <dependency> 
             <groupId>org.apache.felix</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>1.2.0</version>
+            <artifactId>org.apache.felix.framework</artifactId>
+            <version>${felix.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.felix</groupId>
+                    <artifactId>org.osgi.foundation</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency> 
         <dependency> 
             <groupId>org.apache.cxf.dosgi.samples</groupId>
             <artifactId>cxf-dosgi-ri-samples-greeter-interface</artifactId>
             <version>${project.version}</version>
         </dependency> 
-        <dependency>
-           <groupId>junit</groupId>
-           <artifactId>junit</artifactId>
-           <scope>test</scope>
-        </dependency>  
-        <dependency>
-           <groupId>org.easymock</groupId>
-           <artifactId>easymockclassextension</artifactId>
-           <scope>test</scope>
-         </dependency>
     </dependencies> 
 
     <build>

Modified: cxf/dosgi/trunk/systests/common/pom.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/systests/common/pom.xml?rev=779897&r1=779896&r2=779897&view=diff
==============================================================================
--- cxf/dosgi/trunk/systests/common/pom.xml (original)
+++ cxf/dosgi/trunk/systests/common/pom.xml Fri May 29 09:08:40 2009
@@ -61,6 +61,12 @@
       </exclusions>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-bundle-minimal</artifactId>
+      <version>${cxf.version}</version>
+    </dependency>
+
     <dependency> 
       <groupId>org.apache.cxf.dosgi.samples</groupId>
       <artifactId>cxf-dosgi-ri-samples-greeter-interface</artifactId>