gpt4 book ai didi

java - 解码具有大文本元素的 xml 文件时出现 Axis2/JAX-WS 错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:39 25 4
gpt4 key购买 nike

我完全陷入困境,需要你的帮助...我已经使用 jaxb 2.x 创建了一个 Web 服务 stub ,用于在肥皂消息中发送二进制文件(base64 编码的 jpg 图像)的服务。一切工作正常,我能够接收和显示图像,直到我尝试将 eclipse RCP 应用程序导出到产品,这立即导致 LinkageErrors(像往常一样,javax.xml.namespace.QName 等)。

我能够解决这个问题以“重新捆绑”axis2,现在一切都恢复正常 - 除了 stub 内的二进制文件部分的解析,这现在会导致异常(意外元素)。

仔细观察发现,axis2-jaxb 生成的 stub 中使用的读取器 (OMStAXWrapper) 现在不会读取整个 base64 文本,而只会读取前 10000 个字节。然后它找不到元素的正确结尾并抛出异常。

如前所述 - 这在一开始并没有发生,所以我希望它只是一个参数或选项。非常感谢您的每一个帮助或提示!

编辑这不是 JAXB,我使用 JAXWS 和 wsimport 为 wsdl 文件创建 stub ...

最佳答案

简单介绍一下背景知识,OMStAXWrapper 是 Axiom 的一部分,Axiom 是 Axis2 用于 Web 服务的自定义流式传输实用程序,Axis2 使用它来替代 SAAJ。如果以我之前使用 Axis 的经验为依据,如果它有问题,我不会感到非常惊讶。

如果您想通过 SOAP 发送大型二进制文件,目前最好的技术似乎是 MTOM(有关如何将其与 Axis2 一起使用的信息,请参阅 here)。这可以更好地优化二进制表示,并且您的问题可能会消失。但是,客户端和服务器都必须能够使用 MTOM,因此它可能不适合您。

或者,应该可以说服 Axis2 使用标准 SAAJ API 而不是使用 Axiom。 SAAJ 速度较慢,但​​ bug 应该较少。

我的最终建议是为您的客户端放弃 Axis2,并使用更轻量级的东西。 Spring-WS提供了一个非常好的客户端 API,这是我目前选择的用于与远程 Web 服务通信的工具。它支持 Axiom 和 SAAJ 以及 MTOM,而且它足够轻量级,可以很容易地找出出现问题的原因。

关于java - 解码具有大文本元素的 xml 文件时出现 Axis2/JAX-WS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1105104/

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