Declared exceptions in Java interface from Kotlin
up vote
0
down vote
favorite
I have a set of web services that are intercepted by an Aspect with @AfterThrowing. The implementations of the web services are done in Kotlin, but it is based on generated Java code.
So I have a Java interface, and a Kotlin class implementing the interface. When the code throws I want to generically throw the defined fault in the Java interface instead (SomeFault):
public SomeResponseType methodName() throws SomeFault
If everything was in Java it could be done rather easily like this:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception> declaredExceptions = methodSignature.getExceptionTypes();
...and then just execute the constructor of declaredExceptions[0]
But when I do something similar in Kotlin it seems like I can't find the exceptions declared in the Java interface:
val declaredExceptions = methodSignature.exceptionTypes
... gives me an empty list
question: How can I find the Exceptions declared in a java interface when intercepting a Kotlin class implementing that interface?
java kotlin
add a comment |
up vote
0
down vote
favorite
I have a set of web services that are intercepted by an Aspect with @AfterThrowing. The implementations of the web services are done in Kotlin, but it is based on generated Java code.
So I have a Java interface, and a Kotlin class implementing the interface. When the code throws I want to generically throw the defined fault in the Java interface instead (SomeFault):
public SomeResponseType methodName() throws SomeFault
If everything was in Java it could be done rather easily like this:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception> declaredExceptions = methodSignature.getExceptionTypes();
...and then just execute the constructor of declaredExceptions[0]
But when I do something similar in Kotlin it seems like I can't find the exceptions declared in the Java interface:
val declaredExceptions = methodSignature.exceptionTypes
... gives me an empty list
question: How can I find the Exceptions declared in a java interface when intercepting a Kotlin class implementing that interface?
java kotlin
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
1
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have a set of web services that are intercepted by an Aspect with @AfterThrowing. The implementations of the web services are done in Kotlin, but it is based on generated Java code.
So I have a Java interface, and a Kotlin class implementing the interface. When the code throws I want to generically throw the defined fault in the Java interface instead (SomeFault):
public SomeResponseType methodName() throws SomeFault
If everything was in Java it could be done rather easily like this:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception> declaredExceptions = methodSignature.getExceptionTypes();
...and then just execute the constructor of declaredExceptions[0]
But when I do something similar in Kotlin it seems like I can't find the exceptions declared in the Java interface:
val declaredExceptions = methodSignature.exceptionTypes
... gives me an empty list
question: How can I find the Exceptions declared in a java interface when intercepting a Kotlin class implementing that interface?
java kotlin
I have a set of web services that are intercepted by an Aspect with @AfterThrowing. The implementations of the web services are done in Kotlin, but it is based on generated Java code.
So I have a Java interface, and a Kotlin class implementing the interface. When the code throws I want to generically throw the defined fault in the Java interface instead (SomeFault):
public SomeResponseType methodName() throws SomeFault
If everything was in Java it could be done rather easily like this:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception> declaredExceptions = methodSignature.getExceptionTypes();
...and then just execute the constructor of declaredExceptions[0]
But when I do something similar in Kotlin it seems like I can't find the exceptions declared in the Java interface:
val declaredExceptions = methodSignature.exceptionTypes
... gives me an empty list
question: How can I find the Exceptions declared in a java interface when intercepting a Kotlin class implementing that interface?
java kotlin
java kotlin
asked Nov 21 at 19:26
Vegard
93721226
93721226
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
1
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09
add a comment |
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
1
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
1
1
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
Found a solution based on JBs comment:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
Found a solution based on JBs comment:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
add a comment |
up vote
0
down vote
accepted
Found a solution based on JBs comment:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
Found a solution based on JBs comment:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
Found a solution based on JBs comment:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
answered Nov 21 at 20:11
Vegard
93721226
93721226
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53419253%2fdeclared-exceptions-in-java-interface-from-kotlin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-throws/…
– JB Nizet
Nov 21 at 19:29
the interface is in Java, not Kotlin. What I want is to figure out "SomeFault" from my post. The Implementation of the interface and the aspectJ Aspect is in Kotlin.
– Vegard
Nov 21 at 19:33
1
If I understand correctly, what you're examining is the signature of the method of the Kotlin subclass. So if you want it to have a declared thrown exception, use Throws. Otherwise, don't examine that method, but instead the overridden method of the Java interface
– JB Nizet
Nov 21 at 19:36
you are right, I found a solution now based on your anwser, I just assumed wrong that this works the same way in pure Java and in a Java/Kotlin mixed world.
– Vegard
Nov 21 at 20:09