1

我正在尝试创建一个 WSO2 ESB 代理,它将生成一个 HTTP 多部分响应,基本上有 2 个部分:XML 和附加的二进制文件(例如图像)。顺序如下:

  • 服务公开为 HTTP GET 请求
  • 我们首先调用一个返回二进制文件的端点
  • 我们创建一个描述二进制文件的 XML
  • 我们将 2 个元素混合在一起并提供多部​​分响应(XML + 二进制文件)

经过几次尝试并在示例和论坛上环顾四周后,我找不到解决这个特殊情况的方法。我设法调用了端点。我可以在调试日志中看到响应在soap 内部消息中以二进制形式传输。我怀疑我需要使用 MultipartFormDataFormatter。据我了解格式化程序的代码,它需要内部soap消息主体的所有子节点逐个创建一个部分。

因此,我尝试将我的 XML 内容附加为二进制节点的兄弟节点(消息在日志中看起来与预期的一样),并强制 ContentType 使用:

<property name="messageType" value="multipart/form-data" scope="axis2"/>
<property name="ContentType" value="multipart/form-data" scope="axis2"/>

确保调用正确的格式化程序。

不幸的是,这似乎不起作用,响应确实是多部分/表单数据,但数据为零。

有什么帮助吗?

谢谢雅尼克

4

3 回答 3

0

感谢您的回答。

通过启用二进制中继构建器,我进行了几次测试,但我没有得到我期望的确切的多部分响应。

所以,我终于创建了自己的格式化程序。它从主体子项构造多部分响应,并查找一些特定属性来指定标头信息,例如部分内容 ID、传输编码和内容类型。

于 2013-07-09T12:49:17.140 回答
0

您需要在axis2.xml 文件中启用二进制中继构建器以使用multipart/form-data 消息格式。

    <messageBuilder contentType="multipart/form-data"
                    class="org.wso2.carbon.relay.BinaryRelayBuilder"/>


    <messageFormatter contentType="multipart/form-data"
                    class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>
于 2013-06-27T04:34:26.420 回答
0

也许这对其他人有用:

您可以通过取消注释 /repository/conf/axis2/axis2.xml 文件中的以下属性来设置多部分构建器

<messageBuilder contentType="multipart/related" class="org.wso2.carbon.relay.BinaryRelayBuilder"/>

根据我们的理解要求,这里是使用从不同端点接收的 xml 内容和 png 附件制作单个响应消息。

为了实现您的目标,我们可以使用自定义调解器。通过使用自定义类中介,您可以使用 xml 元数据和 png 图像构建响应。

编写一个 java 类来构建具有两个响应的消息可能是在 WSO2 中实现此目的的最佳方式。您可以使用消息构建器和 crate 消息方法以您想要的方式创建消息。您可以使用类调解器,可以在本文档中找到它以将其与 ESB 一起使用

作为进一步的说明,请注意丰富的调解器附加给定的资源。

于 2016-01-22T11:10:43.177 回答