हमारे पास एक बाहरी वेब-सेवा के लिए बाध्यकारी एक जेएक्स-डब्ल्यूएस/जेएक्सबी है जो जावा 7 पर ठीक काम कर रहा है (1.7.0u80) शामिल संदर्भ कार्यान्वयन के साथ। जावा 8 (1.8.0u66) पर माइग्रेशन के दौरान वेब सेवा कॉल आम तौर पर ठीक काम करते हैं, हालांकि यह एसएएपी दोषों और उनके विस्तार तत्वों को जावा अपवादों को अब कस्टम विवरण के साथ अनारश नहीं कर सकता है, इसके बजाय उपसर्ग एक नामस्थान त्रुटि से बंधे नहीं है।"उपसर्ग xsd किसी नामस्थान से बाध्य नहीं है" जावा पर माइग्रेशन के बाद जेएक्सबी के साथ गैर-मार्शलिंग SOAPFault 8
विफलता
Caused by: javax.xml.ws.WebServiceException: java.lang.IllegalArgumentException: prefix xsd is not bound to a namespace
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:138)
at com.sun.xml.internal.ws.client.sei.StubHandler.readResponse(StubHandler.java:238)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:189)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:276)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:104)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
at com.sun.proxy.$Proxy61.proprietaryServiceCall(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:580)
at org.springframework.remoting.jaxws.JaxWsPortClientInterceptor.doInvoke(JaxWsPortClientInterceptor.java:554)
... 56 more
Caused by: java.lang.IllegalArgumentException: prefix xsd is not bound to a namespace
at com.sun.xml.internal.bind.DatatypeConverterImpl._parseQName(DatatypeConverterImpl.java:355)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.LeafPropertyXsiLoader.selectLoader(LeafPropertyXsiLoader.java:75)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.LeafPropertyXsiLoader.startElement(LeafPropertyXsiLoader.java:58)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:559)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:538)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:60)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:153)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:229)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:266)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:235)
at com.sun.xml.internal.bind.unmarshaller.DOMScanner.scan(DOMScanner.java:112)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:354)
at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.unmarshal(BridgeImpl.java:124)
at com.sun.xml.internal.bind.api.Bridge.unmarshal(Bridge.java:309)
at com.sun.xml.internal.ws.db.glassfish.BridgeWrapper.unmarshal(BridgeWrapper.java:217)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.getJAXBObject(SOAPFaultBuilder.java:304)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:135)
बाह्य सेवा से प्रतिक्रिया की तरह लग रहा है नीचे (मैं प्रकार के नाम अनाम रखी जाती है, लेकिन सब कुछ छोड़ दिया है)
<env:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>ERROR MESSAGE</faultstring>
<detail>
<n1:ProprietaryException xmlns:n1="java:com.company.service" xsi:type="n1:ProprietaryException">
<errorCode xsi:type="xsd:int">400</errorCode>
<errorReason xsi:type="xsd:string">Specific error</errorReason>
</n1:ProprietaryException>
</detail>
</env:Fault>
</env:Body>
</env:Envelope>
समस्या XSD के साथ है : int और xsd: stringCode और faultReason में स्ट्रिंग। ऐसा लगता है कि बाध्यकारी होने पर उपसर्ग/नामस्थान घोषणा शीर्ष स्तर के लिफाफे से विरासत में नहीं मिल रही है। समस्या this question के समान दिखती है, सिवाय इसके कि यह एसओएपी फॉल्ट हैंडलिंग के बारे में है, और मेरे मामले में, कोड जेएक्स-डब्ल्यूएस और जेएक्सबी के अंदर गहरा है, इसलिए मुझे नहीं पता कि हम इसे कैसे ठीक कर सकते हैं या इसे हल कर सकते हैं।
जब तक पुराना कोड कुछ व्यवहारों पर भरोसा नहीं कर रहा था, जो कभी काम नहीं करना चाहिए था, तो मैं मदद नहीं कर सकता लेकिन निष्कर्ष निकाला कि जावा 8 कार्यान्वयन में जेएक्स-डब्ल्यूएस और जेएक्सबी के बीच कुछ तोड़ दिया गया है।
अपडेट (जनवरी 4 2016): मैंने मेट्रो आरआई के बजाय सीएक्सएफ 3.1.4 क्लाइंट के साथ भी कोशिश की है। एक ही समस्या है। यह के रूप में उल्लेख here
अद्यतन (जनवरी 6 2016) एक ही मुद्दा हो रहा है: मैं एक परिवर्तन JAXB आरआई 2.2.6 के लिए पेश करने के लिए इस समस्या को संकुचित कर दिया है। इस प्रकार समस्या को जावा 7 पर जेएक्सबी आरआई 2.2.6 के लिए मजबूर अपग्रेड के साथ दोहराया जा सकता है। ऐसा लगता है कि यह JAXB-890 में किए गए परिवर्तनों से संबंधित हो सकता है।
मैं कम से कम दो अलग अलग तरीकों से इस के आसपास काम कर परीक्षण किया है:
- उपयोग JAXB बल के साथ जावा 8 2.2.5 के लिए वापस डाउनग्रेड (JAX-WS संस्करण में कोई फर्क नहीं लगता है)। एक अच्छा दीर्घकालिक समाधान प्रतीत नहीं होता है।
- मैंने पाया कि
-Dcom.sun.xml.bind.improvedXsiTypeHandling=false
(या बंडल जेडीके जेएक्सबी आरआई का उपयोग करते हुए समकक्ष.internal
संपत्ति) इस मुद्दे को हल करने के लिए प्रतीत होता है। लेकिन मुझे नहीं पता कि यह सेटिंग वास्तव में क्या करती है; या मेरे सिस्टम में शेष JAXB उपयोग के लिए क्या प्रभाव होंगे।
यहां आगे बढ़ने के लिए कोई विचार? (1.6.2 परीक्षण किया
क्या आप 'xmlns: xsd =' घोषणा 'लिफाफा' से 'Fault' तत्व में ले जा सकते हैं? – Holger
दुर्भाग्य से, बिना किसी पूर्व-अनमशेल एक्सएमएल हैक के, जैसा कि मैं जिस सेवा को बुला रहा हूं वह मेरा नहीं है। मुझे विश्वास नहीं है कि उनकी प्रतिक्रिया में कुछ भी गलत है, हालांकि मैं मानता हूं कि शायद इस मुद्दे को हल करेंगे। – Chad