我嘗試使用Mtom傳輸文件,直到我使用SoapHandler驗證客戶端簽名爲止它工作得很好。 SoapHandler保留所有消息並將其更改爲base64編碼。所以當我嘗試獲取大文件時,JVM會拋出堆大小異常。你們有沒有辦法解決這個問題?使用SOAPHandler時MTOM不起作用
1
A
回答
2
Java JRE附帶JAX-WS提供程序。這個提供者有我會考慮的錯誤。如果SoapHandler被添加,無論是通過直接獲取HandlerChain還是通過使用HandlerResolver,都將使用MTOM正確創建的消息解構,並將附件內聯放置在SOAP消息中。如果附件很大,則可能導致性能很差或內存不足錯誤。
我發現的唯一解決方案是使用另一個JAX-WS提供程序。從測試中,Axis2似乎完美地工作(雖然它有大量的依賴關係)。簡單地將另一個提供者放在類路徑上會導致它被使用。 Java在META-INF/services中查找名爲javax.xml.ws.spi.Provider的文件。如果找到該文件,它將使用指定的提供程序。主Axis2 jar將包含該文件以確保使用Axis2提供程序。其他提供商也可能解決這個問題。
由於此自動提供程序檢測,您可能會發現您的應用程序確實或沒有此問題,具體取決於它在哪裏運行。例如,如果您將應用程序部署到IBM WebSphere,那麼它已經覆蓋了默認的提供程序,您將不會遇到此問題。其他應用程序服務器可能也會覆蓋默認的提供程序。如果您可以獲得副本,IBM還提供了一個非常好的jar,com.ibm.jaxws.thinclient_7.0.0.jar,其中包含了Axis2。這隻能用於獨立應用程序(那些不在WebSphere中運行的應用程序),但它非常方便,並且可以解決此問題。
相關問題
- 1. 使用MTOM和base64Encoding一起
- 2. 獲取使用SOAPHandler
- 3. 與XOP一起使用MTOM的優點
- 4. WS使用MTOM下載操作
- 5. 使用MTOM時需要設置maxReceivedMessageSize嗎?
- 6. 使用「setup.py」時,Jupyter不起作用
- 7. 當使用mysqli_query()時,mysql_error()不起作用
- 8. 使用ggplot2時閃避不起作用
- 9. 使用RequireJS時,moment.locale(String)不起作用
- 10. IF使用變量時不起作用
- 11. 發佈時使用$ .ajax不起作用
- 12. 使用ProGuard時不起作用
- 13. webView.canGoBack()在使用loadDataWithBaseURL()時不起作用
- 14. .append()在使用phonegap時不起作用
- 15. 使用webrtc時,ReplayKit不起作用
- 16. 使用setPosition時旋轉不起作用
- 17. GooglePlaces在使用proguard時不起作用
- 18. 當使用FLAG_ACTIVITY_REORDER_TO_FRONT時,overridePendingTransition不起作用
- 19. 通過SOAPHandler啓用日誌記錄時,mtom服務中的JAX-WS故障更改
- 20. 在Mono上使用MTOM
- 21. 使用SOAP 1.1操作時出錯使用MTOM優化發送附件
- 22. rvm使用不起作用
- 23. 使用document.getElementsByName()不起作用?
- 24. 使用mshtml不起作用
- 25. 使用AndroidHttpClient不起作用
- 26. 使用$(this)不起作用
- 27. 使用TemplateUrl不起作用
- 28. 使用StreamWriter不起作用
- 29. 使用Selenium不起作用
- 30. 使用Page.ClientScript.RegisterClientScriptBlock不起作用
這並不嚴格回答你的問題,但是有可能使用REST服務而不是SOAP?我問,因爲幾年前,我花了很長時間試圖讓MTOM處理大型二進制文件,最終放棄了。後來,我意識到不是試圖將二進制對象放入SOAP信封中,而是將該文件表示爲URI並將其作爲響應流返回。 – Ickster 2012-09-17 12:58:24