首页 文章

使用WSO2 ESB创建多部分响应

提问于
浏览
1

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

  • 该服务作为HTTP GET请求公开

  • 我们首先调用返回二进制文件的 endpoints

  • 我们创建一个描述二进制文件的XML

  • 我们将2个元素混合在一起并提供多部分响应(XML二进制文件)

经过多次尝试并浏览样本和论坛后,我找不到如何解决这个特殊情况 . 我设法调用了 endpoints . 我可以在调试日志中看到响应在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

    您需要在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"/>
    
  • 0

    感谢您的回答 .

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

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

  • 0

    也许这对其他人有用:

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

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

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

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

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

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

相关问题