设置超时代码
JaxWsDynamicClientFactoryclientFactory=JaxWsDynamicClientFactoryStringurl=\"http://192.168.1.56:7001/test?WSDL\";.newInstance();ClientclientTemp=clientFactory.createClient(url);HTTPConduithttp=(HTTPConduit)clientTemp.getConduit();httpClientPolicy.setConnectionTimeout(10);//连接超时httpClientPolicy.setReceiveTimeout(1000);//响应超时http.setClient(httpClientPolicy);Object[]arg;try{HTTPClientPolicyhttpClientPolicy=newHTTPClientPolicy();httpClientPolicy.setAllowChunking(false);//取消块编码Stringresult=\"\";arg=clientTemp.invoke(\"testMothd\",\"8698053\");result=(String)arg[0];e.printStackTrace();}catch(Exceptione){}这部分代码大家在网络上随便搜索都能得到,这个就是CXF设置连接的超时与响应时间的方法。当然小编主要讲的不是这个,主要来说下到底如何区分连接超时,还是响应超时。分析请求错误(5大种)
创建Client类时,URL无效
Exceptioninthread\"main\"org.apache.cxf.service.factory.ServiceConstructionException:CouldnotresolveURL\"http://www.qq.com/e?WSDL\".atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.composeUrl(DynamicClientFactory.java:566)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:253)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:198)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:191)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:146)atClientTest.soap(ClientTest.java:141)atClientTest.main(ClientTest.java:167)Causedby:java.io.FileNotFoundException:http://www.qq.com/e?WSDLatsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1241)atorg.apache.cxf.resource.URIResolver.tryFileSystem(URIResolver.java:167)atorg.apache.cxf.resource.URIResolver. Exceptioninthread\"main\"org.apache.cxf.service.factory.ServiceConstructionException:CouldnotresolveURL\"http://192.168.1.56:7001/test?WSDL\".atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.composeUrl(DynamicClientFactory.java:566)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:253)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:198)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:191)atorg.apache.cxf.endpoint.dynamic.DynamicClientFactory.createClient(DynamicClientFactory.java:146)atClientTest.soap(ClientTest.java:143)atClientTest.main(ClientTest.java:176)Causedby:java.net.ConnectException:Connectiontimedout:connectatjava.net.PlainSocketImpl.socketConnect(NativeMethod)atjava.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)atjava.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)atjava.net.Socket.connect(Socket.java:519)atsun.net.NetworkClient.doConnect(NetworkClient.java:158)atsun.net.www.http.HttpClient.openServer(HttpClient.java:394)atsun.net.www.http.HttpClient.openServer(HttpClient.java:529)atsun.net.www.http.HttpClient. 2012-6-309:38:34org.apache.cxf.jaxb.JAXBUtilslogGeneratedClassNames信息:Createdclasses:eai.yxd.com.Dispatche,eai.yxd.com.DispatcheResponse,eai.yxd.com.ObjectFactory2012-6-309:38:51org.apache.cxf.phase.PhaseInterceptorChaindoDefaultLogging警告:Interceptorfor{com.yxd.eai}dispatche#{com.yxd.eai}dispatchehasthrownexception,unwindingnoworg.apache.cxf.interceptor.Fault:CouldnotsendMessage.atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)atClientTest.soap(ClientTest.java:154)atClientTest.main(ClientTest.java:176)Causedby:org.apache.cxf.transport.http.HTTPException:HTTPresponse'404:NotFound'whencommunicatingwithhttp://192.168.1.56:7001/testatorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2255)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2193)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2037)atorg.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)atorg.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreorg.apache.cxf.interceptor.Fault:CouldnotsendMessage.atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)atClientTest.soap(ClientTest.java:154)atClientTest.main(ClientTest.java:176)Causedby:org.apache.cxf.transport.http.HTTPException:HTTPresponse'404:NotFound'whencommunicatingwithhttp://192.168.1.56:7001/Testatorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2255)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2193)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2037)atorg.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)atorg.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8more创建Client类成功,调用方法时,连接超时 2012-6-309:41:11org.apache.cxf.jaxb.JAXBUtilslogGeneratedClassNames信息:Createdclasses:eai.yxd.com.Dispatche,eai.yxd.com.DispatcheResponse,eai.yxd.com.ObjectFactory2012-6-309:42:16org.apache.cxf.phase.PhaseInterceptorChaindoDefaultLogging警告:Interceptorfor{com.yxd.eai}dispatche#{com.yxd.eai}dispatchehasthrownexception,unwindingnoworg.apache.cxf.binding.soap.SoapFault:ErrorwritingtoXMLStreamWriter.atorg.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:175)atorg.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:81)atorg.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:61)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)atClientTest.soap(ClientTest.java:154)atClientTest.main(ClientTest.java:176)Causedby:javax.xml.stream.XMLStreamException:java.net.SocketTimeoutException:connecttimedoutatcom.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeStartElement(XMLStreamWriterImpl.java:1335)atorg.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:122)...10moreCausedby:java.net.SocketTimeoutException:connecttimedoutatjava.net.PlainSocketImpl.socketConnect(NativeMethod)atjava.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)atjava.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)atjava.net.Socket.connect(Socket.java:519)atsun.net.NetworkClient.doConnect(NetworkClient.java:158)atsun.net.www.http.HttpClient.openServer(HttpClient.java:394)atsun.net.www.http.HttpClient.openServer(HttpClient.java:529)atsun.net.www.http.HttpClient. 2012-6-309:35:13org.apache.cxf.jaxb.JAXBUtilslogGeneratedClassNames信息:Createdclasses:eai.yxd.com.Dispatche,eai.yxd.com.DispatcheResponse,eai.yxd.com.ObjectFactory2012-6-309:35:15org.apache.cxf.phase.PhaseInterceptorChaindoDefaultLogging警告:Interceptorfor{com.yxd.eai}dispatche#{com.yxd.eai}dispatchehasthrownexception,unwindingnoworg.apache.cxf.interceptor.Fault:CouldnotsendMessage.atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)atClientTest.soap(ClientTest.java:154)atClientTest.main(ClientTest.java:176)Causedby:java.net.SocketTimeoutException:SocketTimeoutExceptioninvokinghttp://192.168.1.56:7001/Test:Readtimedoutatsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)atjava.lang.reflect.Constructor.newInstance(Constructor.java:513)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2107)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2092)atorg.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)atorg.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreCausedby:java.net.SocketTimeoutException:Readtimedoutatjava.net.SocketInputStream.socketRead0(NativeMethod)atjava.net.SocketInputStream.read(SocketInputStream.java:129)atjava.io.BufferedInputStream.fill(BufferedInputStream.java:218)atjava.io.BufferedInputStream.read1(BufferedInputStream.java:258)atjava.io.BufferedInputStream.read(BufferedInputStream.java:317)atsun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)atsun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)atsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1002)atjava.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2224)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2193)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2037)...11moreorg.apache.cxf.interceptor.Fault:CouldnotsendMessage.atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)atorg.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:285)atorg.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:271)atClientTest.soap(ClientTest.java:154)atClientTest.main(ClientTest.java:176)Causedby:java.net.SocketTimeoutException:SocketTimeoutExceptioninvokinghttp://192.168.1.56:7001/Test:Readtimedoutatsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)atjava.lang.reflect.Constructor.newInstance(Constructor.java:513)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2107)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2092)atorg.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)atorg.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:697)atorg.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)...8moreCausedby:java.net.SocketTimeoutException:Readtimedoutatjava.net.SocketInputStream.socketRead0(NativeMethod)atjava.net.SocketInputStream.read(SocketInputStream.java:129)atjava.io.BufferedInputStream.fill(BufferedInputStream.java:218)atjava.io.BufferedInputStream.read1(BufferedInputStream.java:258)atjava.io.BufferedInputStream.read(BufferedInputStream.java:317)atsun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)atsun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)atsun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1002)atjava.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2224)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2193)atorg.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2037)...11more区分方法 我们了解到以上的异常发生之后,小编就在异常下了动了点头脑try{arg=clientTemp.invoke(\"testMothd\",\"8698053\");result=(String)arg[0];}catch(Exceptione){e.printStackTrace();Throwableta=e.getCause();if(tainstanceofSocketTimeoutException){System.out.println(\"响应超时\");}elseif(tainstanceofHTTPException){System.out.println(\"服务端地址无效404\");}elseif(tainstanceofXMLStreamException){System.out.println(\"连接超时\");}else{}System.out.println(\"other\");}当然以上调用都是Client类创建成功之后的异常情况处理,至于创建Client类时,发生异常区分方法,按照以上思路同理解决。 因篇幅问题不能全部显示,请点此查看更多更全内容