Spring - Spring-WS,带有附件的SOAP或带有JAXB作为数据绑定器的MTOM

时间:2012-06-30 14:14:47

标签: java spring soap jaxb spring-ws

我有一个Spring-WS Web服务,我希望能够将二进制数据发送回客户端。我的目的是将SOAP响应格式化为使用MTOM或Soap with attachements。响应将是一个JAXB对象。

我已经设置了Spring-WS环境,并且可以发送和接收请求以使用JAXB。然而,我正在努力设置Binary附件响应,因为Web上的大多数教程和信息主要与发送附件的客户端相关,而我感兴趣的是Server将附件发送回客户端。

两个问题:

  • 将二进制数据返回给客户端的推荐方法是什么?带有附件的SOAP,MTOM还是只是将base64encoded数据作为xml标签返回?

  • 是否有任何示例显示如何使用这两种方法之一配置Spring-WS以返回二进制附件?

1 个答案:

答案 0 :(得分:2)

1) Mtom显然是通过soap发送文件的事实标准,所以我建议这样做。

2) 如果你看一下spring-ws distrobution(不是maven)附带的mtom示例,你会看到90%的设置需要。一个区别是您应该将其设置为application / octet-stream

的附件的expectedContentType

现在服务器上的代码看起来像这样

try {
        dataHandler = new DataHandler(new File("/tmp/test.exe").toURL());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    return new JaxbObjectResponse("id", dataHandler);

,您的架构定义看起来像这样。

<xsd:element name="JaxbObjectResponse">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="id" type="xsd:string" />
            <xsd:element name="file" type="xsd:base64Binary" xmime:expectedContentTypes="application/octet-stream" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>