java - 使用 MTOM 从 Web 服务解码 jaxb 时出错

标签 java jaxb eclipselink jax-ws mtom

我有一个使用基于模式的负载的 jax-ws 网络服务。添加 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 header :

 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]: /image/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...

但不断收到此错误:

[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>

有什么建议吗?

最佳答案

错误消息基本上表明值 MjAxNi0wMS0wNVQwOTowMDowMA== 是非法的。如果你检查它,它是一个 base64 编码的日期:

2016-01-05T09:00:00

我不知道您要解码的对象中是否还有其他字段。但是如果有 unmarsall 进程无法处理 base64 编码值。您应该检查某处是否需要适配器。

一句话:您可能应该有一个 base64 解码器或检查原始服务,因为解码后的 String 并不是真正的二进制数据。

(如果您插入所有使用的代码,我可以深入了解它。)

关于java - 使用 MTOM 从 Web 服务解码 jaxb 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946949/

相关文章:

java - EclipseLink 复合 PK 与 FK

java - JAX-WS SOAP 请求正文参数的 JAXB 绑定(bind)

java - 为什么我的方法无法按字母顺序对链接列表进行排序?

spring-mvc - 当类由 JAXB 生成时,如何向根元素添加属性?

java - 忽略 JAXB 中的根元素

在 JRUBY 中构建 Web 应用程序之前,Tomcat 可能不会从 JAXB 加载 TOMCAT JAR

java - 运行两个并行事务

jpa - EclipseLink 创建表时控制列顺序

java - Spring Data Neo4j (SDN) 查询参数不使用转换器

java - JUnit 测试 ArrayList