我完全卡住了,需要您的帮助...我已经使用JAXB 2.X创建了一个网络服务存根,用于在SOAP消息中发送二进制文件(Base64编码JPG图像)的服务。一切正常,我能够接收和显示图像,直到我试图将Eclipse RCP应用程序导出到产品中,这导致了ImeDiatiatiale linkageErrors(与往常一样,Javax.xml.namespace.qname等)。

我能够解决该问题来“重新启动” Axis2,现在一切都可以正常工作 - 除了存根中的二进制文件部分的解析,现在导致异常(意外元素)。

仔细观察的是,在Axis2-Jaxb生成的存根中使用的读者(OmstaxWrapper)现在没有读取整个Base64文本,而仅读取第一个10000个字节。然后,它找不到元素的正确结尾并引发异常。

如前所述 - 这不是在开始时发生的,所以我希望这只是一个参数或选项。预先感谢您的一切帮助或提示!

编辑这不是JAXB,我使用JAXWS和WSIMPORT创建WSDL文件的存根...

有帮助吗?

解决方案

对于一些背景,OmstaxWrapper是AXIOM的一部分,AxiS2是Web服务的自定义流媒体通用功能,AXIS2用作SAAJ的替换。如果我先前对Axis的经历要经历,我不会感到非常惊讶。

如果您想通过肥皂发送大型二进制文件,目前最好的技术似乎是MTOM(请参阅 这里 对于如何与Axis2一起使用)。这可以更好地优化二进制表示形式,您的问题可能会消失。但是,客户端和服务器都必须能够说MTOM,因此可能不是您的选择。

另外,应该说服Axis2使用标准的SAAJ API而不是使用Axiom。 SAAJ较慢,但应该越来越小。

我的最后建议是为您的客户放弃Axis2,并使用更轻巧的东西。 Spring-WS 提供了一个非常不错的客户端API,目前是我与远程Web服务交谈的选择工具。它支持Axiom和Saaj,以及MTOM,并且非常轻巧,很容易找出为什么出了问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top