2013-03-22 6 views
17

पर मैंने सोप संदेशों को एक एसओएपी सेवा से साबुन संदेश डाउनलोड किया है और डाउनलोड करने के द्वारा साबुन सेवा का नकल करने की कोशिश कर रहा है संदेश। निम्नलिखित कोड दिखाता है कि कैसे मैं आवश्यक रिस्पांसजेएक्सबी रैंडम क्लासकास्टएक्सप्शन के साथ नेटबीन्स .. com.sun.xml.bind.vind.v2.runtime.reflect.Accessor

public static DataClientType unmarshallFile(String fileName) throws Exception { 
    XMLInputFactory xif = XMLInputFactory.newFactory(); 
    XMLStreamReader xsr = xif.createXMLStreamReader(ClientSampleSoapResponseData.class.getResourceAsStream(fileName)); 
    xsr.nextTag(); // Advance to Envelope tag 
    xsr.nextTag(); // Advance to Header 
    xsr.nextTag(); // Advance to Body tag 
    xsr.nextTag(); // Advance to getClientByAccountResponse 
    xsr.nextTag(); // Advance to content of getClientByAccountResponse 

    JAXBContext jc = JAXBContext.newInstance(GetClientByAccountResponse.class); 
    Unmarshaller unmarshaller = jc.createUnmarshaller(); 
    JAXBElement<GetClientByAccountResponse> je = unmarshaller.unmarshal(xsr, GetClientByAccountResponse.class); 

    return je.getValue().getClientDataContract(); 
} 

में साबुन संदेश Unmarshalling हूँ हालांकि मैं इस ClassCastExeption जो बेतरतीब ढंग से होता है जा रहे हैं। कई परीक्षण पुनरावृत्तियों के बाद, ऐसा होने लगता है। कभी-कभी एक साफ और निर्माण इसे ठीक करता है लेकिन कभी-कभी यह काम नहीं करता है।

java.lang.ClassCastException: com.x.X.X.X.GetClientByAccountResponse$JaxbAccessorF_clientDataContract cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor 
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:188) 
at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:180) 
at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:256) 
at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:90) 

मैं ऐसे पुराने JAXB संस्करणों पर वापस लौट रहा और Maven संकलक विन्यास में समर्थन किया फ़ोल्डरों का प्रयोग के रूप में अन्य ऑनलाइन सुझाव की कोशिश की है लेकिन यह अभी भी

कोई भी विचार होता है क्या यह कारण हो सकता है और संभव समाधान पर?

यू धन्यवाद

+1

@TheDownVoter यदि आप गोल मतदान करने वाले लोगों के प्रश्न पूछ रहे हैं, कम से कम एक कारण प्रदान करें या कुछ सुझाव दें! याद रखें कि हम उतने स्मार्ट नहीं हैं जितना आप सोचते हैं कि आप हैं। –

उत्तर

23

निम्नलिखित कोड

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true 
+0

वाह! आपने इस समाधान के साथ मुझे बहुत मदद की! क्या आपने निरीक्षण किया कि यह अनुकूलन इतना परेशानी क्यों कर रहा था? – berezovskyi

+0

सं समस्या के बाद पर ले जाया गया हल किया गया था, लेकिन मैं JDK संस्करणों के साथ क्या करना है अपने कुछ संदेह है। –

+0

मेरी इच्छा है कि मैं इसे सौ बार – rrhartjr

1

मैं अपने अनुप्रयोगों में से एक में एक ही मुद्दा में भाग का उपयोग कर

@BeforeClass 
public static void init(){ 
    System.setProperty("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true"); 
} 

@AfterClass 
public static void revert(){ 
    System.getProperties().remove("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize"); 
}  

पैरामीटर भी JVM पर सेट किया जा सकता है के साथ हल। मेरे मामले में, परियोजना जावा 1.5 संगतता के साथ संकलित लाइब्रेरी का उपयोग कर रही थी, जबकि मुख्य परियोजना में संस्करण 1.6 के साथ संगतता थी। जब मैंने 1.6 का उपयोग करने के लिए दोनों को बदल दिया तो समस्या दूर हो गई। मुझे उम्मीद है कि यह किसी की मदद करने में सक्षम होगा क्योंकि समस्या काफी निराशाजनक और ट्रैक करने में मुश्किल हो सकती है।

2

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

मेरे मामले में, समस्या यह थी कि मेरा एप्लिकेशन वेब सेवाओं का उपयोग करता था, और मैंने जैक्स-डब्ल्यूएस को भी बाहरी नहीं किया था। एप्लिकेशन com.sun.xml.bind.v2.runtime कक्षाओं का उपयोग शुरू कर दिया, लेकिन जब यह डब्लूएसडीएल फ़ाइल के साथ काम करना शुरू कर दिया, तो आंतरिक जेएक्स-डब्ल्यूएस ने com.sun.xml को आमंत्रित करने का प्रयास किया। आंतरिक .bind.v2.runtime कक्षाएं। जब मैंने JAX-WS को डाउनलोड और स्थापित किया, तो त्रुटि दूर हो गई, और मैं अपग्रेड जारी रखने में सक्षम था।

-3

पैरेंट पोम में आपके निर्भरता प्रबंधक के माध्यम से रन टाइम के दौरान जैक्सबीम्प्ल जार समेत इस समस्या को हल किया जाएगा। यह समाधान मैवेन परियोजनाओं के लिए विशिष्ट है।

+0

कोई भी साझा कर सकता है कि यह उत्तर क्यों दिया गया था? यह नहीं कि मैं जानता हूं, समझता हूं या विश्वास करता हूं कि यह सही है, केवल इतना है कि मैं अपने चेहरे पर नहीं देखता कि यह गलत क्यों है। – MaasSql

1

स्वीकार कर लिया समाधान Intellij में मुझे जब के लिए काम किया है, लेकिन जब कमांड लाइन से Maven चल मैं एक ही त्रुटि मिली। इस वहाँ के रूप में अच्छी तरह से हल maven-surefire-plugin के लिए विन्यास को जोड़ना मुद्दा:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <configuration> 
       <systemPropertyVariables> 
        <com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize>true</com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize> 
       </systemPropertyVariables> 
      </configuration> 
     </plugin> 
+0

यह मेरे लिए काम करता है जब कमांड लाइन से मेवेन चलाते हैं लेकिन जेनकींस में नहीं। क्या आप जानते हैं किस प्रकार की समस्या होगी? – user1766169

+0

क्षमा करें, मुझे नहीं पता। – L42

+1

क्षमा करें। मेरी गलती। यह बढ़िया काम करता है। – user1766169

1

मैं build.sbt से अलग JAXB-impl जार पर निर्भरता को हटा दिया। यह अब काम करता है।

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