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) {
+
+ }
+
}