Author: rfeng
Date: Mon Jan 28 13:39:55 2008
New Revision: 616060

URL: http://svn.apache.org/viewvc?rev=616060&view=rev
Log:
Tolerate java generics in method<-->operation matching

Modified:
    
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
    
incubator/tuscany/java/sca/modules/implementation-resource/src/test/java/org/apache/tuscany/sca/implementation/resource/ResourceImplementationTestCase.java
    
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java

Modified: 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java?rev=616060&r1=616059&r2=616060&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKInvocationHandler.java
 Mon Jan 28 13:39:55 2008
@@ -44,6 +44,7 @@
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
 import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
@@ -180,6 +181,15 @@
      */
     @SuppressWarnings("unchecked")
     private static boolean match(Operation operation, Method method) {
+        if (!method.getName().equals(operation.getName())) {
+            return false;
+        }
+        if (operation instanceof JavaOperation) {
+            Method m = ((JavaOperation)operation).getJavaMethod();
+            if (method.equals(m)) {
+                return true;
+            }
+        }
         Class<?>[] params = method.getParameterTypes();
         DataType<List<DataType>> inputType = operation.getInputType();
         List<DataType> types = inputType.getLogical();

Modified: 
incubator/tuscany/java/sca/modules/implementation-resource/src/test/java/org/apache/tuscany/sca/implementation/resource/ResourceImplementationTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-resource/src/test/java/org/apache/tuscany/sca/implementation/resource/ResourceImplementationTestCase.java?rev=616060&r1=616059&r2=616060&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/implementation-resource/src/test/java/org/apache/tuscany/sca/implementation/resource/ResourceImplementationTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/implementation-resource/src/test/java/org/apache/tuscany/sca/implementation/resource/ResourceImplementationTestCase.java
 Mon Jan 28 13:39:55 2008
@@ -26,7 +26,6 @@
 import junit.framework.TestCase;
 
 import org.apache.tuscany.sca.host.embedded.SCADomain;
-import org.apache.tuscany.sca.implementation.data.collection.Collection;
 
 /**
  * @version $Rev$ $Date$
@@ -48,10 +47,10 @@
     //FIXME Does not work yet as the proxy invocation handler does not handle
     // generics properly
     public void testResource() throws Exception {
-//        Resource resource = scaDomain.getService(Resource.class, 
"ResourceServiceComponent");
-//        InputStream is = resource.get("test.html");
-//        String document = read(is);
-//        assertTrue(document.indexOf("<body><p>hello</body>") != -1);
+        Resource resource = scaDomain.getService(Resource.class, 
"ResourceServiceComponent");
+        InputStream is = resource.get("test.html");
+        String document = read(is);
+        assertTrue(document.indexOf("<body><p>hello</body>") != -1);
     }
 
     /**

Modified: 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java?rev=616060&r1=616059&r2=616060&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaOperationImpl.java
 Mon Jan 28 13:39:55 2008
@@ -30,7 +30,7 @@
  * @version $Rev$ $Date$
  */
 public class JavaOperationImpl extends OperationImpl implements JavaOperation {
-    
+
     private Method method;
 
     public Method getJavaMethod() {
@@ -39,6 +39,35 @@
 
     public void setJavaMethod(Method method) {
         this.method = method;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((method == null) ? 0 : method.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (!super.equals(obj))
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final JavaOperationImpl other = (JavaOperationImpl)obj;
+        if (method == null) {
+            if (other.method != null)
+                return false;
+        } else if (!method.equals(other.method))
+            return false;
+        return true;
+    }
+
+    public String toString() {
+        return method == null ? "null" : method.toGenericString();
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to