2011-06-28 54 views
0

我的應用程序需要連接到Web服務。客戶端提供的WSDL文件使用軸2-1.5.2中的wsdl2java實用程序轉換爲java。第一次連接到webservice期間發生問題。它給了我與webservice的連接第一次超時

java.net.SocketTimeoutException: Read timed out 
at jrockit.net.SocketNativeIO.readBytesPinned(Native Method) 
at jrockit.net.SocketNativeIO.socketRead(SocketNativeIO.java:46) 
at java.net.SocketInputStream.socketRead0(SocketInputStream.java) 
at java.net.SocketInputStream.read(SocketInputStream.java:129) 
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293) 
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:747) 
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) 
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:238) 
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78) 
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106) 
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116) 
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413) 
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1974) 
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735) 
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1100) 
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346) 
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:558) 
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199) 
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:77) 
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400) 
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225) 
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438) 
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) 
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:230) 
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:166) 
at com.jmango.webservice.talker.WCFServiceStub.addSaleSupportRequest(WCFServiceStub.java:270) 
at com.jmango.domain.salessystem.talkerimp.RequestServiceInfoImp.addanewServiceRequest(RequestServiceInfoImp.java:58) 
at com.jmango.mobilenexus.service.MobileServiceImp.sendQueryforServiceInfo(MobileServiceImp.java:358) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) 
at org.springframework.remoting.support.RemoteInvocationTraceInterceptor.invoke(RemoteInvocationTraceInterceptor.java:77) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
at $Proxy8.sendQueryforServiceInfo(Unknown Source) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:180) 
at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:110) 
at org.springframework.remoting.caucho.Hessian2SkeletonInvoker.invoke(Hessian2SkeletonInvoker.java:94) 
at org.springframework.remoting.caucho.HessianExporter.invoke(HessianExporter.java:142) 
at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:70) 
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:50) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:512) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:718) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:111) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) 
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) 
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776) 
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705) 
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:899) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 
at java.lang.Thread.run(Thread.java:619) 

我試圖尋找答案的網站,雖然有一個地方,其中提到它可能是在那個被阻塞web服務端防火牆,我不是能夠找到一個有效的解決方案。任何幫助都感激不盡。

運行:

  • 的Apache Tomcat 6.0
  • 的Axis2 1.5.2
+0

您是否有大量的啓動代碼或許多jar加載第一次調用?首次部署Web應用程序時,您可能需要啓動泵。 –

回答

0

針對web容器,如Tomcat的第一個請求,常加載用於第一時間的servlet。框架Servlet如AxisServlet,CXFServlet等通常在啓動生命週期階段執行一大堆事情。例如,安訊士加載其內部服務註冊表,連接網絡並公開服務。 CXF執行相同的操作,查看Spring配置文件等等。

因此,首先快速檢查是否應該將標記添加到web.xml中。

這是在servlet級別 - 其他彈性資源也可以延遲第一個請求(例如,連接池 - 實際上是第一次填充所有池)。

當然,這可能不是唯一的原因 - 堆棧跟蹤顯示SSL連接。根據Web服務的位置,可能是通過XML安全網關,與安全服務(如OCSP證書驗證服務)交互? 「固定套接字」表明JRockit JVM足夠聰明,可以在其中創建長期存在的SSL連接,因此可能需要花費很長時間才能進行證書交換過程 - 可能是增加時間窗口的平臺配置?

服務器和客戶端之間是否還有其他的事情發生了初始化? Web容器(例如Apache + mod_jk)的Web連接器,應用服務器負載均衡器等?可以剝洋蔥和檢查這些。

您的堆棧跟蹤還表明您有一個背靠背的用戶代理(例如,服務器接受請求,然後在某處發出出站請求)。如果您向本地實例發出出站請求(例如,客戶端向localhost發送請求:8080,8080上的webapp向localhost:8080 /另一個web應用發送請求),則可能會導致資源匱乏,並且可能是某個症狀最終的死鎖(即循環請求正在等待線程池釋放以提供請求,但都在等待)。在任何Web服務器/應用程序服務器組合中,這種樣式條件都是正確的,您可以在其中轉向並根據自己的設置提出網絡請求。

相關問題