使用WSO2 ESB创建多部分响应

时间:2013-06-21 13:24:33

标签: wso2 wso2esb

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

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

经过几次尝试并浏览样本和论坛后,我找不到如何解决这个特殊情况。 我设法调用了端点。我可以在调试日志中看到响应在soap内部消息中以二进制形式传输。 我怀疑我需要使用MultipartFormDataFormatter。据我所知,格式化程序的代码,它需要内部soap消息正文的所有子节点按子节点创建一个部分。

所以我试图将我的XML内容作为二进制节点的兄弟节点附加(消息在日志中看起来像预期的那样),并强制使用以下内容:

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

一定要调用正确的格式化程序。

不幸的是,这似乎不起作用,响应确实在multipart / form-data中,但是零字节数据。

任何帮助?

由于 的Yannick

3 个答案:

答案 0 :(得分: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"/>

答案 1 :(得分:0)

感谢您的回答。

我通过启用Binary Relay构建器进行了多次测试,但是我没有得到我期望的确切多部分响应。

所以,我终于创建了自己的Formatter。它构造了来自body子节点的多部分响应,并查找一些特定的属性来指定标题信息,例如部分内容id,传输编码和内容类型。

答案 2 :(得分:0)

这可能会对其他人有用:

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

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

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

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

编写一个java类来构建带有两个响应的消息可能是以WSO2方式实现此目的的最佳方法。您可以使用消息构建器和包消息方法以您希望的方式创建消息。您可以使用类调解器,可以在this documentation中找到它与ESB一起使用

作为进一步澄清,请注意enrich mediator附加给定资源。