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

标签 java spring soap jaxb spring-ws

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

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

两个问题:

  • 将二进制数据返回给客户端的推荐方法是什么?带有附件的 SOAP、MTOM 或者只是简单地将 base64 编码的数据作为 xml 标记返回?

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

最佳答案

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

2) 如果您查看 spring-ws 发行版(不是来自 Maven)附带的 mtom 示例,您将看到 90% 的所需设置。唯一的区别是附件的预期内容类型,您应该将其设置为 application/octet-stream

现在您在服务器上的代码将如下所示

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>

关于java - Spring - Spring-WS,带有带有附件的 SOAP 或带有 JAXB 的 MTOM 作为数据绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11274752/

相关文章:

android - KSOAP2 和 WSDL 返回解码错误 : unexpected element

php - WSDL SoapClient 和 PHP + 自己的命名空间

Java - 从配置文件加密/解密用户名和密码

java - JSOUP 向表单提交 POST

java - 如何在 Java 中创建阶乘及解释

java - 在 Java 中使用两个线程并从另一个线程控制一个线程?

java - Spring XML 错误 : Could not resolve placeholder 'cas.server.host'

java - Maven 在 Eclipse 中找不到 Artifact 命令 spring-boot-starter-parent

java - getRealPath ("/") 在 spring boot 中不工作

web-services - 使用客户端证书的 THTTPRIO SSL 无法正常工作