2017-02-28 8 views
6

मेरे पास एक SOAP webservice है जिसे मैं किसी एप्लिकेशन के अंदर कॉल करने का प्रयास कर रहा हूं। मैं डब्लूएसडीएल से स्रोत उत्पन्न करने के लिए सीएक्सएफ-कोडेजन-प्लगइन (3.1.10) का उपयोग कर रहा हूं।क्लासकास्ट अपवाद: com.sun.xml.internal.bind.v2.runtime.reflect.Accessor

जेनरेट क्लाइंट का उपयोग करके, यदि मैं एप्लिकेशन के भीतर webservice को कॉल करता हूं, तो यह बहुत अच्छा काम करता है। हालांकि, मैं एक ही पैकेज के खिलाफ एक ही पैकेज के खिलाफ एक और जेएक्सबी उदाहरण का उपयोग कर रहा हूं जो किसी समस्या का कारण बन रहा है।

उदाहरण के लिए, निम्नलिखित अच्छा काम करता है:

OutboundServicePortType service = new OutboundService().getOutboundServicePort(); 
service.sendMessage(message); 

हालांकि, एक नया JAXB उदाहरण आरंभ ठीक पहले विफल getOutboundServicePort() कॉल का कारण बनता है:

:

JAXBContext.newInstance(SendMessageRequest.class); 

OutboundServicePortType service = new OutboundService().getOutboundServicePort(); 
service.sendMessage(message); 
निम्नलिखित स्टैकट्रेस साथ

Caused by: java.lang.ClassCastException: outbound.model.standard.StandardOutboundMessage$JaxbAccessorF_messageUUId cannot be cast to com.sun.xml.internal.bind.v2.runtime.reflect.Accessor 
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:190) 
    at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:179) 
    at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:271) 
    at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:77) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
    at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113) 
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488) 
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:153) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:305) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123) 
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147) 
    at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:152) 
    at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:96) 
    at com.sun.xml.internal.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:98) 
    at com.sun.xml.internal.ws.db.glassfish.JAXBRIContextFactory.newContext(JAXBRIContextFactory.java:79) 
    ... 25 more 

जो चीजें मैंने अभी तक कोशिश की है:

JAXB classes from Webservice marshalling error

  • मैं अपने JDK फ़ोल्डर में कोई समर्थन जार है, तो this answer लागू नहीं होता
  • JAXB-impl जार (2.2.11) से आ रही है, तो यह मेरे एप्लिकेशन में ऊंट-JAXB बहुत निहित लगता है और this answer की तरह नहीं है।
  • This answer समस्या का वर्णन करने के लिए प्रतीत होता है, लेकिन उन्होंने जो समाधान लिया वह मुझे अस्पष्ट नहीं लगता है।

Problems creating JAXBContext to marshal object as XML

  • यह सवाल मेरा के समान प्रतीत हो रहा है, लेकिन समाधान के साथ वे मेरी स्थिति के लिए काम नहीं कर सकते हैं जा रहा समाप्त हो गया (देखें नीचे)

Netbeans with JAXB Random ClassCastException ..cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor

  • मैंने स्वीकार किए गए समाधान System.setProperty("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true"); की कोशिश की जो काम करता है। हालांकि, दुर्भाग्य से मेरे पर्यावरण में इस संपत्ति को स्थापित करना मेरे लिए एक विकल्प नहीं है। इसके अलावा, ऐसा लगता है कि यह एक हैक का थोड़ा सा है जो वास्तविक मुद्दे को संबोधित नहीं करता है (जब तक कि मैं इसे गलत समझ नहीं पा रहा हूं)।

मैं अपने द्वारा छोड़ी गई छोटी रस्सी के साथ खुद को लटकने वाला हूं। मुझे यहां क्या समझ नहीं आ रहा है?

+0

मेरे पास आपके लिए कोई जवाब नहीं है, लेकिन यह * दो अलग-अलग वर्ग लोडर की तरह लगता है जैसा कि आपके द्वारा लिंक किए गए उस अचूक उत्तर से निहित है। इसके अलावा मैं उस 'नोप्टीमाइज' विकल्प पर कम से कम थोड़ी-थोड़ी रत्न खोदने में सक्षम था: http://cxf.547215.n5.nabble.com/JAXB-is-not-sitting-well-in-an-OSGI -eclipse-env-tp569834p569839.html, मुझे लगता है कि जैक्सब कुछ वास्तव में अजीब चीजें करता है हालांकि मुझे यकीन नहीं है कि आप क्या कर रहे हैं जो इस मुद्दे को ट्रिगर कर रहा है। एक जवाब देखने में रुचि रखते हैं। यदि कुछ भी यहां नहीं आता है तो बीटीडब्ल्यू जैक्सबी उपयोगकर्ताओं को मेलिंग सूची पर भी पूछता है। –

उत्तर

4

मुझे अपने स्वयं के प्रश्न का उत्तर देने से नफरत है, लेकिन मैं यह सुनिश्चित करना चाहता था कि जिस समाधान के साथ मैं समाप्त हुआ वह स्पष्ट रूप से दस्तावेज किया गया था।

मूल मुद्दा यह था कि ऊंट-जैक्सब द्वारा लाया गया जैक्सब-इम्प्ला जार जेडीके 8 प्रदान संस्करण के साथ संघर्ष कर रहा था।

This answer बताता है कि अधिक स्पष्ट रूप से हो रहा है:

मैं एक ही त्रुटि का सामना किया जब मैं क्या JDK के साथ आया था की तुलना में एक नए संस्करण के लिए JAXB उन्नत करने के लिए कोशिश की।जावा को रनटाइम पर जेएक्सबी के दो या दो से अधिक उदाहरण सामने आए और यह तय नहीं कर सका कि कौन सा संस्करण उपयोग करना है।

मेरे मामले में, मैंने बस जैक्सब-इम्प्लाइड को छोड़ दिया जो ऊंट-जैक्सब के साथ आया और एप्लिकेशन सही तरीके से काम करना शुरू कर दिया।

संबंधित मुद्दे