मेरे पास वेब सेवाओं का एक सेट है जिसे @AfterThrowing के साथ एक पहलू द्वारा इंटरसेप्ट किया गया है। वेब सेवाओं का कार्यान्वयन कोटलिन में किया जाता है, लेकिन यह उत्पन्न जावा कोड पर आधारित है।

तो मेरे पास जावा इंटरफ़ेस है, और इंटरफ़ेस को कार्यान्वित करने वाला एक कोटलिन क्लास है। जब कोड फेंकता है तो मैं सामान्य रूप से जावा इंटरफ़ेस में परिभाषित गलती को फेंकना चाहता हूं (कुछ फॉल्ट):

public SomeResponseType methodName() throws SomeFault

अगर सब कुछ जावा में होता तो इसे इस तरह आसानी से किया जा सकता था:

MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception>[] declaredExceptions = methodSignature.getExceptionTypes();

... और फिर declaredExceptions[0] के कंस्ट्रक्टर को निष्पादित करें

लेकिन जब मैं कोटलिन में कुछ ऐसा ही करता हूं तो ऐसा लगता है कि मुझे जावा इंटरफ़ेस में घोषित अपवाद नहीं मिल रहे हैं:

val declaredExceptions = methodSignature.exceptionTypes

... मुझे एक खाली सूची देता है

प्रश्न: मैं एक जावा इंटरफ़ेस में घोषित अपवादों को कैसे ढूँढ़ सकता हूँ जब उस इंटरफ़ेस को लागू करने वाले कोटलिन वर्ग को इंटरसेप्ट किया जाता है?

0
Vegard 21 नवम्बर 2018, 22:26

1 उत्तर

सबसे बढ़िया उत्तर

जेबी टिप्पणी के आधार पर समाधान मिला:

Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
0
Vegard 21 नवम्बर 2018, 20:11