我正在尝试创建一个生成HTTP多部分响应的WSO2 ESB代理,基本上有两部分: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
答案 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附加给定资源。