मेरे पास वेब सेवाओं का एक सेट है जिसे @AfterThrowing के साथ एक पहलू द्वारा इंटरसेप्ट किया गया है। वेब सेवाओं का कार्यान्वयन कोटलिन में किया जाता है, लेकिन यह उत्पन्न जावा कोड पर आधारित है।
तो मेरे पास जावा इंटरफ़ेस है, और इंटरफ़ेस को कार्यान्वित करने वाला एक कोटलिन क्लास है। जब कोड फेंकता है तो मैं सामान्य रूप से जावा इंटरफ़ेस में परिभाषित गलती को फेंकना चाहता हूं (कुछ फॉल्ट):
public SomeResponseType methodName() throws SomeFault
अगर सब कुछ जावा में होता तो इसे इस तरह आसानी से किया जा सकता था:
MethodSignature methodSignature = (MethodSignature) joinPoint.getStaticPart().getSignature();
Class<? extends Exception>[] declaredExceptions = methodSignature.getExceptionTypes();
... और फिर declaredExceptions[0]
के कंस्ट्रक्टर को निष्पादित करें
लेकिन जब मैं कोटलिन में कुछ ऐसा ही करता हूं तो ऐसा लगता है कि मुझे जावा इंटरफ़ेस में घोषित अपवाद नहीं मिल रहे हैं:
val declaredExceptions = methodSignature.exceptionTypes
... मुझे एक खाली सूची देता है
प्रश्न: मैं एक जावा इंटरफ़ेस में घोषित अपवादों को कैसे ढूँढ़ सकता हूँ जब उस इंटरफ़ेस को लागू करने वाले कोटलिन वर्ग को इंटरसेप्ट किया जाता है?
1 उत्तर
जेबी टिप्पणी के आधार पर समाधान मिला:
Class.forName(methodSignature.declaringType.genericInterfaces[0].typeName).declaredMethods
.filter { method -> method.name == methodSignature.name }
.forEach { method -> method.exceptionTypes[0] <executed>}
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।