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

时间:2009-07-09 16:44:48

标签: java jax-ws axis2

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

我能够解决这个问题'重新绑定'axis2现在一切正常 - 除了解析存根中的二进制文件部分,现在导致异常(意外元素)。

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

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

修改 它不是JAXB,我使用JAXWS和wsimport为wsdl文件创建存根...

1 个答案:

答案 0 :(得分:1)

对于一些背景知识,OMStAXWrapper是Axiom的一部分,Axiom是Axis2的Web服务自定义流媒体实用程序,Axis2将其用作SAAJ的替代品。如果我之前遇到过Axis的经历,那我就不会感到非常惊讶。

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

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

我的最后建议是为您的客户放弃Axis2,并使用更轻量级的东西。 Spring-WS提供了一个非常好的客户端API,它目前是我与远程Web服务交谈的首选工具。它支持Axiom和SAAJ,以及MTOM,它足够轻巧,很容易找出出错的原因。

相关问题