Java 使用MTOM从web服务解组jaxb时出错
我有一个使用基于模式的负载的jax-ws-web服务。添加MTOM附件类型:Java 使用MTOM从web服务解组jaxb时出错,java,jaxb,eclipselink,jax-ws,mtom,Java,Jaxb,Eclipselink,Jax Ws,Mtom,我有一个使用基于模式的负载的jax-ws-web服务。添加MTOM附件类型: <xs:element name="Attachment" type="xs:base64Binary" xmime:expectedContentTypes="application/octet-stream" minOccurs="0" maxOccurs="1" > </xs:element> 使用soapUI发送请求 HTTP标头:
<xs:element name="Attachment" type="xs:base64Binary"
xmime:expectedContentTypes="application/octet-stream"
minOccurs="0" maxOccurs="1" >
</xs:element>
使用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://i.stack.imgur.com/BEbZS.jpg
接受编码:gzip,deflate
内容类型:多部分/相关;类型=应用程序/xop+xml;开始=;开始信息=文本/xml;边界=---------第96部分20541990.1485816424570
SOAPAction:http://hsn.us.banner.hsntech.com/Level1Request
MIME版本:1.0
内容长度:47624
[1]: https://i.stack.imgur.com/BEbZS.jpg
然后查看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...
----=\u部分\u 96\u 20541990.1485816424570“
内容传输编码:二进制“
内容ID:“
内容处置:附件;name=“test1.jpg”;filename=“test1.jpg”
[0xff][0xd8][0xff][0xe0][0x0][0x10]JFIF[0x0][0x1][0x1][0x0][0x0][0x0][0xff][0xdb][0x0]C[0x0][\n]”等。。。
但不断出现这样的错误:
[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.XMLMarshalException
Exception Description: An error occurred unmarshalling the document
Internal Exception: java.lang.IllegalArgumentException: MjAxNi0wMS0wNVQwOTowMDowMA==]</faultstring></ns0:Fault></S:Body></S:Envelope>
[Exception[EclipseLink-25004](Eclipse持久性服务-2.5.2.v20140319-9ad6abd):org.Eclipse.Persistence.exceptions.xmlmarshallexception
;
异常描述:对文档
;
内部异常:java.lang.IllegalArgumentException:MjAxNi0wMS0wNVQwOTowMDowMA=]
有什么建议吗?错误消息基本上表明值MjAxNi0wMS0wNVQwOTowMDowMA==是非法的。如果您检查它,它是一个
base64
编码日期:
2016-01-05T09:00:00
我不知道您试图解组的对象中是否有其他字段。但如果有,解组进程无法处理base64编码值。您应该检查是否需要某个适配器
一句话:您可能应该有一个base64解码器,或者检查原始服务,因为解码的字符串
实际上不是一些二进制数据
(如果插入所有使用的代码,我可以深入查看。)所有wsdl、注释、http头和http部分似乎都正确。可能是MOXY错误。我建议尝试使用标准JAXB上下文。我们正在使用getValueByXPath()的MOXY功能moxy提供的用于使用xpath从jaxb对象提取值的函数。我不认为标准jaxb提供了这种功能。它是二进制数据。问题是,它不应该在线包含在jaxb中,而是可以通过作为对象定义一部分的DataHandler对象进行extactable。抱歉,但这并不能让我理解太多进一步。谢谢。请尝试将
数据处理程序
更改为对象
,并检查在调试会话中设置了什么。对于我来说,仍然不清楚为什么您认为文件处理是问题所在,而错误显示了一些base64编码的日期。
2016-01-05T09:00:00