我們最近已將JRE 1.7.0_17/Tomcat7.0.39上運行的JAX-WS webservice的技術堆棧更新爲JRE 1.8。 0_66/Tomcat 8.0.28。該Web應用程序在Windows Server 2012上運行。該Web服務使用JAX-WS的Metro實現。客戶端使用JRE 7和內置於JRE中的JAX-WS客戶端API在各種Windows版本上運行。 Web服務用於將文件從客戶機上傳到Web服務,並將這些文件保存在文檔管理系統中。這個實現在Java 7/Tomcat 7下非常完美地工作,但是我們遇到了在Java 8/Tomcat 8服務器端運行的更大有效負載(2MB或更大)的問題。來自客戶端的堆棧跟蹤是:javax.xml.ws.WebServiceException:java.io.IOException:向服務器Tomcat寫入錯誤8
12/02/2015 14:12:38.699 [AWT-EventQueue-0] ERROR DocumentImporterMainWindow$SwingAction.importDocument: Unexpected Problem trying to call the CustomerOrderDMService
javax.xml.ws.WebServiceException: java.io.IOException: Error writing to server
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.createResponsePacket(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at com.sun.proxy.$Proxy30.importDocument(Unknown Source)
at com.mycompany.documentimporter.DocumentImporterMainWindow$SwingAction.importDocument(DocumentImporterMainWindow.java:681)
at com.mycompany.documentimporter.DocumentImporterMainWindow$SwingAction.actionPerformed(DocumentImporterMainWindow.java:612)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.IOException: Error writing to server
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.writeRequests(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
... 54 more
不幸的是,在任何tomcat日誌中都沒有記錄服務器端。我花了幾天的時間尋找解決方案,但沒有成功。我試圖通過各種途徑來調試問題,例如使用 -Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true
(客戶端)和 -Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true
(服務器)Java系統屬性記錄SOAP請求/響應客戶端和服務器端,但當發生錯誤時,只有客戶端請求是被記錄:
---[HTTP request - http://localhost:8080/CustomerOrderDM/services/CustomerOrderDMService]---
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://www.mycompany.com/CustomerOrderDMService/ImportDocument"
User-Agent: JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e
<?xml version="1.0" ?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns3:ImportDocumentRequestDTO xmlns:ns3="http://www.mycompany.com/CustomerOrderDMService/" xmlns:ns2="http://www.mycompany.com/CustomerOrderDMService"><ns2:QuoteNumber>A000049</ns2:QuoteNumber><ns2:SerialNumber>STOCK</ns2:SerialNumber><ns2:DocumentType>Email</ns2:DocumentType><ns2:Description></ns2:Description><ns2:DocumentContents> **some base64 encoded byte[] of the file contents being uploaded**
Message has been truncated
use com.sun.xml.internal.ws.transport.http.HttpAdapter.dumpTreshold property to increase the amount of printed part of the message
--------------------
因爲只有客戶端請求被記錄,我們預計該服務器沒有完全處理該請求,並正在陷入某種異常塊的,但沒有任何登錄到服務器的日誌文件,我們在解決問題時遇到困難。
我們已經嘗試使用Eclipse等內置的監視器,但是我只能看到來自客戶端的請求並且沒有來自服務器的響應(當客戶端發送失敗的較大請求時,小請求日誌請求/在客戶端和服務器上的響應)。其他的調試建議將不勝感激。
我們也嘗試過的Java和Tomcat的不同組合:
- 的Tomcat 7/Java 7的工程=
- 的Tomcat 7/8的Java工程=
- Tomcat的8/Java 7的=不工作
- Tomcat的8/Java的8 =不起作用
這使我們認爲,這個問題是在Tomcat 8.無論是東西Tomca改變t 8,現在我們需要設置一些新的超時/有效負載設置,或者Tomcat 8有與此特定問題相關的錯誤。
我們已經嘗試設置一些Tomcat連接設置,如maxPostSize="-1"
,connectionTimeout="-1"
,disableUploadTimeout="true"
,connectionUploadTimeout="-1"
,keepAliveTimeout="-1"
但這些都不工作,真的覺得像在黑暗中拍攝不知道什麼是在服務器端去。
我們嘗試將Metro Jars服務器端更新爲最新版本(jaxws-ri-2.2.10)以及使用Java 8運行客戶端。不幸的是,這些工作都不成功。任何幫助將不勝感激。
你應該接受你自己的答案作爲答案。 :) –
maxSwallowSize是什麼意思? – Nurlan