You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2007/03/10 23:29:50 UTC

svn commit: r516799 - /incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java

Author: jboynes
Date: Sat Mar 10 14:29:50 2007
New Revision: 516799

URL: http://svn.apache.org/viewvc?view=rev&rev=516799
Log:
use getMethod to locate method to invoke rather than iterating over all

Modified:
    incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java

Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java?view=diff&rev=516799&r1=516798&r2=516799
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/implementation/java/JavaAtomicComponent.java Sat Mar 10 14:29:50 2007
@@ -19,12 +19,14 @@
 package org.apache.tuscany.core.implementation.java;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import java.util.List;
 
 import org.apache.tuscany.spi.ObjectFactory;
 import org.apache.tuscany.spi.component.TargetInvokerCreationException;
 import static org.apache.tuscany.spi.idl.java.JavaIDLUtils.findMethod;
 import org.apache.tuscany.spi.model.Operation;
+import org.apache.tuscany.spi.model.DataType;
 import org.apache.tuscany.spi.model.physical.PhysicalOperationDefinition;
 import org.apache.tuscany.spi.wire.TargetInvoker;
 import org.apache.tuscany.spi.wire.Wire;
@@ -46,20 +48,36 @@
 
     public TargetInvoker createTargetInvoker(String targetName, Operation operation)
         throws TargetInvokerCreationException {
-        Method[] methods;
-        Class callbackClass = null;
-        if (operation.isCallback()) {
-            callbackClass = operation.getServiceContract().getCallbackClass();
-            methods = callbackClass.getMethods();
 
-        } else {
-            methods = implementationClass.getMethods();
-        }
-        Method method = findMethod(operation, methods);
-        if (method == null) {
+        String name = operation.getName();
+        Class<?>[] paramTypes = getPhysicalTypes(operation);
+        Method method;
+        try {
+            if (!operation.isCallback()) {
+                method = implementationClass.getMethod(name, paramTypes);
+            } else {
+                Class<?> callbackClass = operation.getServiceContract().getCallbackClass();
+                method = callbackClass.getMethod(name, paramTypes);
+            }
+        } catch (NoSuchMethodException e) {
             throw new TargetMethodNotFoundException(operation);
         }
         return new JavaTargetInvoker(method, this, workContext);
+    }
+
+    private <T> Class<?>[] getPhysicalTypes(Operation<T> operation) {
+        DataType<List<DataType<T>>> inputType = operation.getInputType();
+        List<DataType<T>> types = inputType.getLogical();
+        Class<?>[] javaTypes = new Class<?>[types.size()];
+        for (int i = 0; i < javaTypes.length ; i++) {
+            Type physical = types.get(i).getPhysical();
+            if (physical instanceof Class<?>) {
+                javaTypes[i] = (Class<?>) physical;
+            } else {
+                throw new UnsupportedOperationException();
+            }
+        }
+        return javaTypes;
     }
 
     public TargetInvoker createTargetInvoker(String targetName, PhysicalOperationDefinition operation)



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org