使用MTOM的Web服务解组JAXB时出现错误

5

我有一个使用基于架构的有效负载的jax-ws web服务。添加MTOM附件类型:

<xs:element name="Attachment" type="xs:base64Binary"
            xmime:expectedContentTypes="application/octet-stream" 
            minOccurs="0" maxOccurs="1" >
</xs:element>

ws-import生成的Java文件看起来是正确的:

@XmlRootElement(name = "Contact")
public class Contact {
    @XmlElement(name = "Attachment")
    @XmlMimeType("application/octet-stream")
    protected DataHandler attachment;

使用soapUI发送请求。
HTTP 头部:
 Accept-Encoding: gzip,deflate
 Content-Type: multipart/related; type=application/xop+xml; start=<rootpart@soapui.org>; start-info=text/xml; boundary=----=_Part_96_20541990.1485816424570
 SOAPAction: http://hsn.us.banner.hsntech.com/Level1Request
 MIME-Version: 1.0
 Content-Length: 47624
  [1]: https://istack.dev59.com/BEbZS.webp

然后请看编码文件部分的HTTP部分:
------=_Part_96_20541990.1485816424570"
Content-Transfer-Encoding: binary"
Content-ID: <test1.jpg>"
Content-Disposition: attachment; name="test1.jpg"; filename="test1.jpg""
[0xff][0xd8][0xff][0xe0][0x0][0x10]JFIF[0x0][0x1][0x1][0x1][0x0]`[0x0]`[0x0][0x0][0xff][0xdb][0x0]C[0x0][\n]"... etc...

但是一直出现这个错误:
[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.XMLMarshalException&#xd;
Exception Description: An error occurred unmarshalling the document&#xd;
Internal Exception: java.lang.IllegalArgumentException: MjAxNi0wMS0wNVQwOTowMDowMA==]</faultstring></ns0:Fault></S:Body></S:Envelope>

有什么建议吗?

所有的wsdl、注释、http头和http部分似乎都正确。也许这是一个MOXY的bug。我建议尝试使用标准的JAXB上下文。 - Michele Mariotti
我们正在使用moxy功能的getValueByXPath()函数,该函数由moxy提供,以使用xpath从jaxb对象中提取值。我认为标准的JAXB不提供这种能力。 - OldProgrammer
1个回答

0
错误信息基本上告诉我们,值MjAxNi0wMS0wNVQwOTowMDowMA==是非法的。如果您检查它,它是一个base64编码的日期:
2016-01-05T09:00:00

我不知道您尝试反序列化的对象中是否有另一个字段。但是如果有,那么反序列化过程将无法处理base64编码的值。您应该检查是否需要适配器。

简而言之:您应该可能需要一个base64解码器或检查原始服务,因为解码后的String实际上并不是一些二进制数据。

(如果您插入了所有使用的代码,我可以深入研究一下。)


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - OldProgrammer
尝试将“DataHandler”更改为“Object”,并在调试会话中检查设置的内容。对我来说,仍然不清楚为什么您认为文件处理是问题所在,而错误显示一些base64编码日期。 - Hash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接