加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – WSO2-ESB JSON响应格式

发布时间:2020-12-16 22:58:52 所属栏目:百科 来源:网络整理
导读:我的后端服务响应 XML,我默认返回它. 如果客户端给我一个adds参数(比如: outout_format = json),我需要在“outSequence”中将响应转换为JSON. 例如: resultfoobar/foofoo2bar2/foo2nestednodevalue/node/nested/result 应该作为回应 {"foo": "bar","foo2":
我的后端服务响应 XML,我默认返回它.

如果客户端给我一个adds参数(比如:& outout_format = json),我需要在“outSequence”中将响应转换为JSON.

例如:

<result>
<foo>bar</foo>
<foo2>bar2</foo2>
<nested>
<node>value</node>
</nested>
</result>

应该作为回应

{
"foo": "bar","foo2": "bar2","nested":{
"node":"value"
}
}

这是一个测试代理服务(我只是在这里使用inSequence来显示问题):

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
           name="JSONtest"
           transports="https,http"
           statistics="disable"
           trace="disable"
           startOnLoad="true">
       <target>
          <inSequence>
             <property name="TEST_WAITING_FOR"
                       value="json"
                       scope="default"
                       type="STRING"/>
             <header name="To" action="remove"/>
             <property name="RESPONSE" value="true"/>
             <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
             <payloadFactory media-type="xml">
                <format>
                   <response xmlns="">
                      <result>success</result>
                      <code>123</code>
                   </response>
                </format>
                <args/>
             </payloadFactory>
             <switch source="get-property('TEST_WAITING_FOR')">
                <case regex="json">
                   <property name="messageType"
                             value="application/json"
                             scope="axis2"
                             type="STRING"/>
                </case>
                <default>
                   <property name="messageType" value="text/xml" scope="axis2" type="STRING"/>
                </default>
             </switch>
             <send/>
          </inSequence>
       </target>
       <description/>

它回应:

{"response":{"result":"success","code":123}}

有没有办法删除根节点“响应”,使其看起来像这样?

{"result":"success","code":123}

当我尝试使用Enrich-mediator(例如$body / result / * – > $body / *)删除节点“result”时,它变为带有多个根节点的无效XML,而JSON只包含第一个节点.

我知道有可能Payload一个JSON消息,但后端可以返回一个具有不同格式和不同数量的嵌套节点的XML,所以我不能将它硬编码为JSON.

看来我需要实现自己的JSONMessageFromatter? (任何代码示例?)

UPD:我找到了解决方案(感谢Dakshika)

<payloadFactory media-type="json">
            <format>$1</format>
            <args>
               <arg expression="$.response" evaluator="json"></arg>
            </args>
</payloadFactory>

解决方法

在ESB 4.7版本中,有效负载工厂介体支持多种介质类型,xml和json,您可以相应地进行更改.

请尝试以下链接

http://www.dilan.me/articles/tech-notes/how-to-use-wso2-products-esb-payload-factory-mediator-to-change-json-service-output/

http://wso2.com/library/articles/2013/12/restful-integration-with-wso2-esb/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读