मेरे पास जैक्सडब्लूएस वेब सेवा क्लाइंट है जो वर्षों से जावा 6 में सफलतापूर्वक चल रहा है। अब जब जावा संस्करण 8 करने के लिए उन्नत किया गया था, हम NullPointerException हो रही है जब पोर्टजावा 6 के लिए जैक्सडब्ल्यूएस webservice क्लाइंट जावा 8 में काम नहीं कर रहा है 0
java.lang.NullPointerException
at com.sun.xml.internal.ws.client.ClientContainer$1.getResource(Unknown Source)
at com.sun.xml.internal.ws.assembler.MetroConfigLoader.locateResource(Unknown Source)
at com.sun.xml.internal.ws.assembler.MetroConfigLoader.locateResource(Unknown Source)
at com.sun.xml.internal.ws.assembler.MetroConfigLoader.init(Unknown Source)
at com.sun.xml.internal.ws.assembler.MetroConfigLoader.<init>(Unknown Source)
at com.sun.xml.internal.ws.assembler.TubelineAssemblyController.getTubeCreators(Unknown Source)
at com.sun.xml.internal.ws.assembler.MetroTubelineAssembler.createClient(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.createPipeline(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getStubHandler(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source)
at javax.xml.ws.Service.getPort(Unknown Source)
at myclient.stub.MyService.<init>(MyService.java:38)
मैं जावा 7 संस्करण 1.7.0_80 साथ इसे चलाने की कोशिश की है हो रही है और वहाँ यह भी काम करता है लेकिन जावा के पहले संस्करण 8 कारणों इस अपवाद।
मैं कुछ समय से इस के साथ अपने सिर को टक्कर लगी हूं, इसलिए यदि कोई मुझे कोई फिक्स दे सकता है कि इसे ठीक करना शुरू करना है तो यह वास्तव में बहुत अच्छा होगा।
यहां डब्ल्यूएसडीएल है, मैंने इसे थोड़ा संपादित किया क्योंकि यह मेरी सेवा नहीं है लेकिन उम्मीद है कि यह पर्याप्त है?
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<wsdl:definitions xmlns:ns1="http://www.dummyservice/sample/interface" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Sample"
targetNamespace="http://www.dummyservice/sample/interface">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
targetNamespace="http://www.dummyservice/sample/interface" xmlns="http://www.dummyservice/sample/interface"
elementFormDefault="qualified" jaxb:version="2.0">
<xs:element name="PersonQuery">
<xs:complexType>
<xs:sequence>
<xs:element name="system" type="xs:string" />
<xs:element name="user" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PersonReply">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="HeaderType" />
<xs:element name="person" type="PersonType" minOccurs="0" maxOccurs="1" />
<xs:element name="address" type="AddressType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="HeaderType">
<xs:sequence>
<xs:element name="tila" type="StatusType" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="StatusType">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumClass>
<jaxb:typesafeEnumMember name="SUCCESS" value="0001" />
<jaxb:typesafeEnumMember name="FAIL" value="0000" />
</jaxb:typesafeEnumClass>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="0000" />
<xs:enumeration value="0001" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="PersonType">
<xs:sequence>
<xs:element name="firstname" type="xs:string" minOccurs="0" />
<xs:element name="lastname" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="AddressType">
<xs:sequence>
<xs:element name="addresstype" type="AddresstypeType" minOccurs="0" />
<xs:element name="streetaddress" type="xs:string" minOccurs="0" />
<xs:element name="city" type="xs:string" minOccurs="0" />
<xs:element name="postalcode" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="AddresstypeType">
<xs:annotation>
<xs:appinfo>
<jaxb:typesafeEnumClass>
<jaxb:typesafeEnumMember name="HOME" value="001" />
<jaxb:typesafeEnumMember name="OFFICE" value="002" />
</jaxb:typesafeEnumClass>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="001" />
<xs:enumeration value="002" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
</wsdl:types>
<wsdl:message name="PersonQueryOperationRequest">
<wsdl:part element="ns1:PersonQuery" name="parameters" />
</wsdl:message>
<wsdl:message name="PersonQueryOperationResponse">
<wsdl:part element="ns1:PersonReply" name="parameters" />
</wsdl:message>
<wsdl:portType name="SamplePort">
<wsdl:operation name="PersonQueryOperation">
<wsdl:input message="ns1:PersonQueryOperationRequest" />
<wsdl:output message="ns1:PersonQueryOperationResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SampleSOAP" type="ns1:SamplePort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="PersonQueryOperation">
<soap:operation soapAction="http://www.dummyservice/sample/interface/SampleOperation" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SampleService">
<wsdl:port binding="ns1:SampleSOAP" name="Sample">
<soap:address location="https://127.0.0.1/data/ws" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
संपादित करें: कक्षा लोड करने की समस्या, दोनों संदर्भ वर्ग लोडर और वर्ग 'वर्ग लोडर प्रतीत हो रहा है कि ClientContainer में अशक्त हैं।
private final ResourceLoader loader = new ResourceLoader() {
public URL More ...getResource(String resource) throws MalformedURLException {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
if (cl == null) {
cl = this.getClass().getClassLoader();
}
return cl.getResource("META-INF/"+resource);
}
};
हम स्पष्ट रूप से लागू ws फोन यह काम करना शुरू करने से पहले संदर्भ वर्ग लोडर करने के लिए सिस्टम वर्ग लोडर सेट करते हैं। लेकिन क्या यह इसके लिए अच्छा तय है? मैं सोच रहा हूं कि इसने जावा 8 में क्यों काम करना बंद कर दिया है और क्या यह उनके डब्ल्यूएस-कार्यान्वयन में एक मुद्दा हो सकता है?
सादर,
Janne
क्या आप अपना डब्लूएसडीएल शामिल करने के लिए अपना प्रश्न संपादित कर सकते हैं, तो हम इस मुद्दे को फिर से बनाने का प्रयास कर सकते हैं? – VGR
मैंने डब्लूएसडीएल को शामिल किया है, मुझे इसे मूल से अलग करने के लिए इसे संपादित करना था, लेकिन उम्मीद है कि यह ठीक है। –
यह एकमात्र तरीका [उस विधि] जैसा दिखता है (http://grepcode.com/file/repository.grepcode।com/java/root/jdk/openjdk/8u40-b25/com/sun/xml/internal/ws/client/ClientContainer.java # ClientContainer.0loader) NullPointerException को फेंक सकता है जब वर्ग क्लासलोडर द्वारा लोड किया जाता है (तब से [ सिस्टम क्लासलोडर को इंगित करने के लिए जावा को शून्य वापस करने की अनुमति है] (http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getClassLoader--))। आप किस ओएस पर चल रहे हैं? क्या आपने जावा के नवीनतम संस्करण का उपयोग करने की कोशिश की है? – VGR