我尝试使用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时需要设置maxReceivedMessageSize吗?
- 2. 使用RequireJS时,moment.locale(String)不起作用
- 3. 当使用mysqli_query()时,mysql_error()不起作用
- 4. IF使用变量时不起作用
- 5. webView.canGoBack()在使用loadDataWithBaseURL()时不起作用
- 6. 使用setPosition时旋转不起作用
- 7. 使用webrtc时,ReplayKit不起作用
- 8. 当使用FLAG_ACTIVITY_REORDER_TO_FRONT时,overridePendingTransition不起作用
- 9. 通过SOAPHandler启用日志记录时,mtom服务中的JAX-WS故障更改
- 10. 在Mono上使用MTOM
- 11. 使用SOAP 1.1操作时出错使用MTOM优化发送附件
- 12. 使用JavaScript不起作用
- 13. 使用$(this)不起作用
- 14. 使用document.getElementsByName()不起作用?
- 15. 使用TemplateUrl不起作用
- 16. 使用StreamWriter不起作用
- 17. 执行WS操作后不会调用SoapHandler
- 18. setSelectionFromTop有时不起作用
- 19. AngularJS:超时不起作用
- 20. RxJS超时不起作用
- 21. Eunit超时不起作用
- 22. MediaStore.Audio.Playlists.Members.moveItem有时不起作用
- 23. PHPRedis - 时间()不起作用
- 24. ICS时区不起作用
- 25. Box2D和Box2DLighting在与纹理一起使用时不起作用
- 26. htmlentities()与表中的数据一起使用时不起作用
- 27. jQuery.noConflict()修复与prototype.js一起使用jQuery时不起作用
- 28. 使用php file_get_contents()在使用ajax时不起作用
- 29. 当使用继承时,使用CRTP的typedef不起作用
- 30. CollectionView数据源在使用UICollectionViewController时不起作用,但在使用UIViewController和CollectionView时起作用
这并不严格回答你的问题,但是有可能使用REST服务而不是SOAP?我问,因为几年前,我花了很长时间试图让MTOM处理大型二进制文件,最终放弃了。后来,我意识到不是试图将二进制对象放入SOAP信封中,而是将该文件表示为URI并将其作为响应流返回。 – Ickster 2012-09-17 12:58:24