You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2016/03/31 16:14:40 UTC

aries-rsa git commit: [ARIES-1515] Allow interface based arguments

Repository: aries-rsa
Updated Branches:
  refs/heads/master 4ec6aa84b -> dea3223d9


[ARIES-1515] Allow interface based arguments


Project: http://git-wip-us.apache.org/repos/asf/aries-rsa/repo
Commit: http://git-wip-us.apache.org/repos/asf/aries-rsa/commit/dea3223d
Tree: http://git-wip-us.apache.org/repos/asf/aries-rsa/tree/dea3223d
Diff: http://git-wip-us.apache.org/repos/asf/aries-rsa/diff/dea3223d

Branch: refs/heads/master
Commit: dea3223d99b69d465da1aa1434d2836108e255f9
Parents: 4ec6aa8
Author: Christian Schneider <ch...@die-schneider.net>
Authored: Thu Mar 31 16:13:11 2016 +0200
Committer: Christian Schneider <ch...@die-schneider.net>
Committed: Thu Mar 31 16:14:05 2016 +0200

----------------------------------------------------------------------
 .../aries/rsa/provider/tcp/TCPServer.java       | 35 ++++++++++++++++++--
 .../aries/rsa/provider/tcp/TcpProviderTest.java | 18 +++++++++-
 .../rsa/provider/tcp/myservice/MyService.java   |  5 +++
 .../provider/tcp/myservice/MyServiceImpl.java   | 10 ++++++
 4 files changed, 65 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/dea3223d/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java
----------------------------------------------------------------------
diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java
index e70731d..2dcb61a 100644
--- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java
+++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/TCPServer.java
@@ -28,6 +28,7 @@ import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -82,16 +83,46 @@ public class TCPServer implements Closeable, Runnable {
     }
 
     private Object invoke(String methodName, Object[] args)
-        throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+        throws IllegalAccessException, InvocationTargetException, SecurityException {
         Class<?>[] parameterTypesAr = getTypes(args);
-        Method method = service.getClass().getMethod(methodName, parameterTypesAr);
+        Method method = null;
         try {
+            method = getMethod(methodName, parameterTypesAr);
             return method.invoke(service, args);
         } catch (Throwable e) {
             return e;
         }
     }
 
+    private Method getMethod(String methodName, Class<?>[] parameterTypesAr) {
+        try {
+            return service.getClass().getMethod(methodName, parameterTypesAr);
+        } catch (NoSuchMethodException e) {
+            Method[] methods = service.getClass().getMethods();
+            for (Method method : methods) {
+                if (!method.getName().equals(methodName)) {
+                    continue;
+                }
+                if (allParamsMatch(method.getParameterTypes(), parameterTypesAr)) {
+                    return method;
+                }
+            }
+            throw new IllegalArgumentException(String.format("No method found that matches name %s, types %s", 
+                                                             methodName, Arrays.toString(parameterTypesAr)));
+        }
+    }
+
+    private boolean allParamsMatch(Class<?>[] methodParamTypes, Class<?>[] parameterTypesAr) {
+        int c = 0;
+        for (Class<?> type : methodParamTypes) {
+            if (!type.isAssignableFrom(parameterTypesAr[c])) {
+                return false;
+            }
+            c++;
+        }
+        return true;
+    }
+
     private Class<?>[] getTypes(Object[] args) {
         List<Class<?>> parameterTypes = new ArrayList<>();
         if (args != null) {

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/dea3223d/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderTest.java
----------------------------------------------------------------------
diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderTest.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderTest.java
index 5d57c41..c83073d 100644
--- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderTest.java
+++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/TcpProviderTest.java
@@ -19,7 +19,9 @@
 package org.apache.aries.rsa.provider.tcp;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -65,9 +67,14 @@ public class TcpProviderTest {
         Assert.assertEquals(msg, result);
     }
     
+    @Test(expected=RuntimeException.class)
+    public void testCallException() throws IOException, InterruptedException {
+        myServiceProxy.call("throw exception");
+    }
+    
     @Test
     public void testCall() throws IOException, InterruptedException {
-        myServiceProxy.call("test");
+        myServiceProxy.echo("test");
     }
     
     @Test
@@ -75,6 +82,15 @@ public class TcpProviderTest {
         myServiceProxy.callOneWay("test");
     }
     
+    /**
+     * Test for ARIES-1515
+     */
+    @Test
+    public void testCallWithInterfaceBasedParam() throws IOException, InterruptedException {
+        List<String> msgList = new ArrayList<String>();
+        myServiceProxy.callWithList(msgList);
+    }
+    
     @After
     public void close() throws IOException {
         ep.close();

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/dea3223d/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyService.java
----------------------------------------------------------------------
diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyService.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyService.java
index e9d56bf..04cbe86 100644
--- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyService.java
+++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyService.java
@@ -18,13 +18,18 @@
  */
 package org.apache.aries.rsa.provider.tcp.myservice;
 
+import java.util.List;
+
 import javax.jws.Oneway;
 
 public interface MyService {
     String echo(String msg);
+
     void call(String msg);
 
     // Oneway not yet supported
     @Oneway
     void callOneWay(String msg);
+    
+    void callWithList(List<String> msg);
 }

http://git-wip-us.apache.org/repos/asf/aries-rsa/blob/dea3223d/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyServiceImpl.java
----------------------------------------------------------------------
diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyServiceImpl.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyServiceImpl.java
index 5f469ed..de27304 100644
--- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyServiceImpl.java
+++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/myservice/MyServiceImpl.java
@@ -18,6 +18,8 @@
  */
 package org.apache.aries.rsa.provider.tcp.myservice;
 
+import java.util.List;
+
 public class MyServiceImpl implements MyService {
 
     @Override
@@ -27,10 +29,18 @@ public class MyServiceImpl implements MyService {
 
     @Override
     public void call(String msg) {
+        if ("throw exception".equals(msg)) {
+            throw new IllegalArgumentException("Throwing expected exception");
+        }
     }
 
     @Override
     public void callOneWay(String msg) {
     }
 
+    @Override
+    public void callWithList(List<String> msg) {
+
+    }
+
 }