2011-03-11 10 views
6

मैं WebService में एक मुद्दा का सामना करना पड़ रहा हूँ, विवरण में:WebService/java.net.SocketTimeoutException: पढ़ें टाइम आउट हो गया

Caused by: org.apache.cxf.interceptor.Fault: Could not send Message. 
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220) 
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:276) 
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:222) 
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) 
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:171) 
... 26 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:129) 
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:317) 
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687) 
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1000) 
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373) 
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1900) 
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1828) 
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) 
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:590) 
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
... 31 more 

जब मैं लक्ष्य सेवा करने के लिए एक अनुरोध भेजने के लिए प्रयास करते हैं, यह 30-60 सेकंड लेता है और उपरोक्त अपवाद से फेंक दिया गया है। मैं टॉमकैट 5 का उपयोग कर रहा हूं, और मैं पूछना चाहता हूं कि टाइमआउट मूल्य बढ़ाने का कोई तरीका है? इसके अलावा डब्लूएसडीएल और वेब सेवा जो मैं एक्सेस करना चाहता हूं वह चल रहा है और उपलब्ध है।

मैं बहुत, इस में किसी भी मदद की सराहना करते हैं

सधन्यवाद, पी

उत्तर

3

आप इस अनुरोध के लिए "ReceiveTimeout" सेट करना होगा।

यह पृष्ठ संदर्भ अनुरोध करने के लिए इस संपत्ति को जोड़ने के बारे में विवरण दिया गया है:

http://cxf.apache.org/docs/developing-a-consumer.html

-1

राइट इससे पहले कि आप बनाने के अपने वेब सेवा कॉल (यानी port.someAction(....)), तो आप में एक बड़ी राशि के लिए अनुरोध समय-समाप्त निर्धारित करने की आवश्यकता requestContext:

// Set request context property. 
    java.util.Map<String, Object> requestContext = 
     ((javax.xml.ws.BindingProvider) port).getRequestContext(); 

    requestContext.put("com.sun.xml.ws.request.timeout", new Long(600000)); 

या, यदि आप JAX-WS उपयोग कर रहे हैं:

// Set request context property. 
    java.util.Map<String, Object> requestContext = 
     ((javax.xml.ws.BindingProvider) port).getRequestContext(); 

    requestContext.put("com.sun.xml.internal.ws.request.timeout", new Long(600000)); 

यहाँ एक पोस्ट है कि वास्तव में मुझे मदद की है:

How do I set the timeout for a JAX-WS webservice client?

+0

मुझे लगता है कि संदर्भ चर डाल इस तरह के एक बुरा विचार नहीं है, लेकिन वहाँ कोई रास्ता नहीं आप यह सुनिश्चित करें कि 'com.sun.xml.internal के संकुल। *' हर JRE पर उपलब्ध हैं हो सकता है। – froginvasion

2

मैं इस पार्टी के लिए थोड़ी देर हो चुकी हूँ, लेकिन मैं अन्य समाधान की कोशिश की है, और वे काम नहीं किया है, लेकिन this किया था।

MyWebService service = new MyWebService(); 
MyWebServicePortType client = service.MyWebServicePort(); 

Client cl = ClientProxy.getClient(client); 

HTTPConduit http = (HTTPConduit) cl.getConduit(); 

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); 
httpClientPolicy.setConnectionTimeout(0); 
httpClientPolicy.setReceiveTimeout(0); 

http.setClient(httpClientPolicy); 

client.doSomething(...); 
संबंधित मुद्दे