मैं एक वेब सेवा क्लाइंट पर काम कर रहा हूं और मैं अपने वेब सेवा कॉल के लिए टाइमआउट सेट करना चाहता हूं। मैंने अलग-अलग दृष्टिकोणों की कोशिश की है लेकिन फिर भी मैं इसे हासिल करने में सक्षम नहीं हूं। मैं डब्ल्यूएसडीएल से कोड पीढ़ी के लिए जेएक्स-डब्ल्यूएस का उपयोग कर रहा हूं। मैं जेबॉस-एप-5.1 का उपयोग ऐप सर्वर और जेडीके 1.6.0_27 के रूप में कर रहा हूं। मुझे टाइमआउट सेट करने के लिए इन diff दृष्टिकोण मिलते हैं लेकिन उनमें से कोई भी मेरे लिए काम नहीं कर रहा है।जेएक्स-डब्ल्यूएस वेब सेवा कॉल के लिए टाइमआउट कैसे सेट करें
URL mbr_service_url = new URL(null,GlobalVars.MemberService_WSDL, new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL url) throws IOException {
URL clone_url = new URL(url.toString());
HttpURLConnection clone_urlconnection = (HttpURLConnection) clone_url.openConnection();
// TimeOut settings
clone_urlconnection.setConnectTimeout(10000);
clone_urlconnection.setReadTimeout(10000);
return (clone_urlconnection);
}
});
MemberService service = new MemberService(mbr_service_url);
MemberPortType soap = service.getMemberPort();
ObjectFactory factory = new ObjectFactory();
MemberEligibilityWithEnrollmentSourceRequest request = factory.createMemberEligibilityWithEnrollmentSourceRequest();
request.setMemberId(GlobalVars.MemberId);
request.setEligibilityDate(value);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.client.BindingProviderProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.client.BindingProviderProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.client.BindingProviderProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.client.BindingProviderProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.developer.JAXWSProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.ws.developer.JAXWSProperties.CONNECT_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.developer.JAXWSProperties.REQUEST_TIMEOUT, 10000);
((BindingProvider) soap).getRequestContext().put(com.sun.xml.internal.ws.developer.JAXWSProperties.CONNECT_TIMEOUT, 10000);
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
MemberEligibilityWithEnrollmentSourceResponse response = soap.getMemberEligibilityWithEnrollmentSource(request);
logger.log("Call to member service finished.");
अब मैं क्या किया है के लिए है, मैं एक प्रबंधक के अंदर से मेरी वेब सेवा विधि कहा जाता है। मुझे पता है कि यह एक अच्छा दृष्टिकोण नहीं है, लेकिन यह मेरे लिए काम कर रहा है। दोस्तों कृपया मुझे इसे उचित तरीके से करने में मदद करें।
logger.log("Parameters set for createorUpdateContact call.\nGoing in Executor Service.");
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
@Override
public void run() {
try {
response = soap.getMemberEligibilityWithEnrollmentSource(request);
} catch (MemberServiceException ex) {
logger.log("Exception in call to WebService", ex.fillInStackTrace());
}
}
});
executorService.shutdown();
try {
executorService.awaitTermination(GlobalVars.WSCallTimeOut, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
logger.log("Thread Interrupted!", ex);
executorService.shutdownNow();
}
StubExt.PROPERTY_CLIENT_TIMEOUT मेरे लिए काम किया, लेकिन अपवाद के बाद ही '3 * timeoutMillisecond' के लिए फेंक दिया जाता है से ऊपर के खेतों के
मान उदाहरण: यदि 9000 मिलीसेकंड के बाद अपवाद से 'टाइमआउटमिलिसकंड = 3000' फेंक दिया गया है, लेकिन' टाइमआउट के बाद: 3000 एमएस 'लॉग फ़ाइल – mariami
में लिखा गया है धन्यवाद @ मारियामी यह मेरे लिए काम करता है। और अपवाद उचित समय पर फेंक दिया जा रहा है, 3 * टाइमआउट Millisecond के बाद नहीं। यद्यपि इसे काम करने के लिए मुझे जैक्स से संबंधित jboss lib से कुछ जार हटा देना था अन्यथा यह NoClassDefFoundError: javax/xml/ws/spi/Provider21 दे रहा था। –