समस्या यह है कि मुझे प्रदान की जाने वाली फ़ाइल से वेब सेवा क्लाइंट बनाने की आवश्यकता है। मैंने इस फ़ाइल को स्थानीय फ़ाइल सिस्टम पर संग्रहीत किया है और, जब मैं WSDL फ़ाइल को सही फ़ाइल सिस्टम फ़ोल्डर में रखता हूं, तो सब कुछ ठीक है। जब मैं इसे सर्वर पर तैनात करता हूं या फ़ाइल सिस्टम फ़ोल्डर से डब्ल्यूएसडीएल को हटाता हूं, तो प्रॉक्सी डब्ल्यूएसडीएल को नहीं ढूंढ सकता है और एक त्रुटि उठाता है। मैंने वेब खोज लिया है और मुझे निम्नलिखित पोस्ट मिल गई हैं, फिर भी मैं यह काम नहीं कर पा रहा हूं:
JAX-WS Loading WSDL jar
http://www.java.net/forum/topic/glassfish/metro से -और-jaxb / ग्राहक-जार-कैंट-ढूंढ-स्थानीय-wsdl-0
http://blog.vinodsingh.com/2008/12/locally-packaged-wsdl.html
मैं नेटबियंस 6.1 का उपयोग कर रहा हूं (यह एक विरासत एप्लिकेशन है जिसे मुझे इस नए वेब सेवा क्लाइंट के साथ अपडेट करना है)। नीचे JAX-WS प्रॉक्सी वर्ग है:
@WebServiceClient(name = "SOAService", targetNamespace = "http://soaservice.eci.ibm.com/", wsdlLocation = "file:/C:/local/path/to/wsdl/SOAService.wsdl")
public class SOAService
extends Service
{
private final static URL SOASERVICE_WSDL_LOCATION;
private final static Logger logger = Logger.getLogger(com.ibm.eci.soaservice.SOAService.class.getName());
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "file:/C:/local/path/to/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/local/path/to/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
public SOAService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public SOAService() {
super(SOASERVICE_WSDL_LOCATION, new QName("http://soaservice.eci.ibm.com/", "SOAService"));
}
/**
* @return
* returns SOAServiceSoap
*/
@WebEndpoint(name = "SOAServiceSOAP")
public SOAServiceSoap getSOAServiceSOAP() {
return super.getPort(new QName("http://soaservice.eci.ibm.com/", "SOAServiceSOAP"), SOAServiceSoap.class);
}
/**
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns SOAServiceSoap
*/
@WebEndpoint(name = "SOAServiceSOAP")
public SOAServiceSoap getSOAServiceSOAP(WebServiceFeature... features) {
return super.getPort(new QName("http://soaservice.eci.ibm.com/", "SOAServiceSOAP"), SOAServiceSoap.class, features);
}
}
यह प्रॉक्सी का उपयोग करने के लिए मेरा कोड है:
WebServiceClient annotation = SOAService.class.getAnnotation(WebServiceClient.class);
// trying to replicate proxy settings
URL baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource("");//note : proxy uses "."
URL url = new URL(baseUrl, "/WEB-INF/wsdl/client/SOAService.wsdl");
//URL wsdlUrl = this.getClass().getResource("/META-INF/wsdl/SOAService.wsdl");
SOAService serviceObj = new SOAService(url, new QName(annotation.targetNamespace(), annotation.name()));
proxy = serviceObj.getSOAServiceSOAP();
/* baseUrl;
//classes\com\ibm\eci\soaservice
//URL url = new URL(baseUrl, "../../../../wsdl/SOAService.wsdl");
proxy = new SOAService().getSOAServiceSOAP();*/
//updating service endpoint
Map<String, Object> ctxt = ((BindingProvider)proxy ).getRequestContext();
ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192);
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WebServiceUrl);
NetBeans ने वेब-inf / wsdl / client / SOAService में WSDL की एक प्रति लगाई है , इसलिए मैं इसे META-INF में भी नहीं जोड़ना चाहता । सेवा वर्ग WEB-INF / classes / com / ibm / eci / soaservice / में हैं और बेसल वैरिएबल में फाइलसिस्टम पूरा पथ समाहित करता है (c: \ path \ to to the \ Project ... \ soaservice)। उपरोक्त कोड त्रुटि उठाता है:
javax.xml.ws.WebServiceException: WSDL को इस पर एक्सेस करने में विफल: फ़ाइल: /WEB-INF/wsdl/client/SOAService.wsdl। यह इसके साथ विफल रहा: \ WEB-INF \ wsdl \ client \ SOAService.wsdl (पथ नहीं मिल सकता)
तो, सबसे पहले, क्या मुझे प्रॉक्सी क्लास के wsdllocation को अपडेट करना होगा? तब मैं WEB-INF / classes / com / ibm / eci / soaservice में SOAService वर्ग को WSDL के लिए \ WEB-INF \ wsdl \ client \ SOAService.wsdl में खोजने के लिए कैसे बताऊं?
EDITED : मुझे यह अन्य लिंक मिला है - http://jianmingli.com/wp/?cat=41 , जो WSDL को क्लासपाथ में डालने के लिए कहते हैं। मुझे यह पूछने में शर्म आ रही है: मैं इसे वेब एप्लिकेशन क्लासपाथ में कैसे डालूं?