You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by am...@apache.org on 2024/05/27 08:18:23 UTC
(aries-rsa) 01/02: ARIES-2114 - Validate number of parameters and throw NoSuchMethodException if there is no matching method
This is an automated email from the ASF dual-hosted git repository.
amichai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/aries-rsa.git
commit 4f4e00a11e1bff297ac9e71a303dc97f9bdd025d
Author: Amichai Rothman <am...@apache.org>
AuthorDate: Thu Sep 14 01:32:14 2023 +0300
ARIES-2114 - Validate number of parameters and throw NoSuchMethodException if there is no matching method
---
.../aries/rsa/provider/tcp/MethodInvoker.java | 12 +++---
.../aries/rsa/provider/tcp/MethodInvokerTest.java | 48 ++++++++++++++++++++++
2 files changed, 54 insertions(+), 6 deletions(-)
diff --git a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java
index 7ebe96f1..8ef6a0d3 100644
--- a/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java
+++ b/provider/tcp/src/main/java/org/apache/aries/rsa/provider/tcp/MethodInvoker.java
@@ -48,7 +48,7 @@ public class MethodInvoker {
return method.invoke(service, args);
}
- private Method getMethod(String methodName, Class<?>[] parameterTypesAr) {
+ private Method getMethod(String methodName, Class<?>[] parameterTypesAr) throws NoSuchMethodException {
try {
return service.getClass().getMethod(methodName, parameterTypesAr);
} catch (NoSuchMethodException e) {
@@ -61,18 +61,18 @@ public class MethodInvoker {
return method;
}
}
- throw new IllegalArgumentException(String.format("No method found that matches name %s, types %s",
+ throw new NoSuchMethodException(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 (!matches(type, parameterTypesAr[c])) {
+ if (parameterTypesAr.length != methodParamTypes.length)
+ return false;
+ for (int i = 0; i < methodParamTypes.length; i++) {
+ if (!matches(methodParamTypes[i], parameterTypesAr[i])) {
return false;
}
- c++;
}
return true;
}
diff --git a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/MethodInvokerTest.java b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/MethodInvokerTest.java
index ada05d6f..2c2c6e3d 100644
--- a/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/MethodInvokerTest.java
+++ b/provider/tcp/src/test/java/org/apache/aries/rsa/provider/tcp/MethodInvokerTest.java
@@ -55,4 +55,52 @@ public class MethodInvokerTest {
assertEquals(UnsupportedOperationException.class, invoker.invoke("returnSomething", null).getClass());
}
+ @Test
+ public void testOverloadedNumberOfParams() throws Exception {
+ class Tester {
+ public int sum() { return 0; }
+ public int sum(int i) { return i; }
+ public int sum(int i, int j) { return i + j; }
+ }
+
+ Tester tester = new Tester();
+ tester.sum((short)1);
+ tester.sum(Short.valueOf((short)1));
+
+ MethodInvoker invoker = new MethodInvoker(tester);
+ assertEquals(0, invoker.invoke("sum", null));
+ assertEquals(0, invoker.invoke("sum", new Object[] {}));
+ assertEquals(1, invoker.invoke("sum", new Object[] { 1 }));
+ assertEquals(3, invoker.invoke("sum", new Object[] { 1, 2 }));
+ }
+
+ @Test
+ public void testNoParams() throws Exception {
+ class Tester {
+ public int f() { return 0; }
+ }
+ Tester service = new Tester();
+ MethodInvoker invoker = new MethodInvoker(service);
+ assertEquals(0, invoker.invoke("f", new Object[] {}));
+ assertEquals(0, invoker.invoke("f", null));
+ }
+
+ @Test
+ public void testTooFewParams() {
+ class Tester {
+ public int f(int i) { return i; }
+ }
+ MethodInvoker invoker = new MethodInvoker(new Tester());
+ assertThrows(NoSuchMethodException.class, () -> invoker.invoke("f", new Object[] {}));
+ }
+
+ @Test
+ public void testTooManyParams() {
+ class Tester {
+ public int f(int i) { return i; }
+ }
+ MethodInvoker invoker = new MethodInvoker(new Tester());
+ assertThrows(NoSuchMethodException.class, () -> invoker.invoke("f", new Object[] { 1, 2 }));
+ }
+
}
\ No newline at end of file