gpt4 book ai didi

java - 使用 SOAPHandler 时 MTOM 不工作

转载 作者:行者123 更新时间:2023-11-30 04:42:12 24 4
gpt4 key购买 nike

我尝试使用 Mtom 传输文件,它工作得很好,直到我使用 SoapHandler 验证客户端签名。 SoapHandler 保留所有消息并将其更改为 base64 编码。因此,当我尝试获取大文件时,Jvm 会抛出堆大小异常。你们知道有什么办法可以解决这个问题吗?

最佳答案

Java JRE 附带 JAX-WS 提供程序。这个提供商有我认为的错误。如果通过直接获取 HandlerChain 或使用 HandlerResolver 添加 SoapHandler,则将解构使用 MTOM 正确创建的消息,并将附件内联放置在 SOAP 消息中。如果附件很大,可能会导致性能非常差或内存不足错误。

我发现的唯一解决方案是使用另一个 JAX-WS 提供程序。从测试来看,Axis2 似乎工作得很好(尽管它有大量的依赖项)。只需将另一个提供程序放在类路径上就会导致它被使用。 Java 在 META-INF/services 中查找名为 javax.xml.ws.spi.Provider 的文件。如果找到该文件,它将使用指定的提供程序。主 Axis2 jar 将包含此文件以确保使用 Axis2 提供程序。其他提供商也可能解决此问题。

由于这种自动提供程序检测,您可能会发现您的应用程序是否存在此问题,具体取决于它运行的位置。例如,如果您将应用程序部署到 IBM WebSphere,它已经覆盖了默认的 Provider,您将不会遇到此问题。可能其他应用程序服务器也覆盖了默认的提供程序。如果您能找到一份副本,IBM 还提供了一个非常好的 jar,com.ibm.jaxws.thinclient_7.0.0.jar,其中打包了 Axis2。这只能用于独立应用程序(那些不在 WebSphere 中运行的应用程序),但它非常方便并解决了这个问题。

关于java - 使用 SOAPHandler 时 MTOM 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com