在wso2 esb中使用Json丰富调解员问题

时间:2017-10-25 08:52:04

标签: wso2 wso2esb

以下是我创建的示例服务,以突出显示我在项目中遇到的问题(请求和响应非常大,此问题在许多地方重复)。

要求: {         “id”:“3”,         “部分”:[“屏幕”] }

实际回应: {     “id”:“3”,     “部分”:“屏幕”,     “make”:“Tamsung” }

期望回应:

{     “id”:“3”,     “部分”:[“屏幕”],     “make”:“Tamsung” }

问题:

  1. “parts”:“屏幕”,

    应该如下所示

    “parts”:[“Screen”],

    即。它不再是数组了。我知道数组只包含一个元素。但是将此服务的输出作为输入(请求)发送到的第三方系统期望该元素为数组。所以我需要它作为数组。

  2. arrayTest.xml:

                 

            <enrich>
                <source clone="true" type="inline">
                    <make xmlns="">Tamsung</make>
                </source>
                <target action="child" xpath="//jsonObject"/>
            </enrich>
            <enrich>
                <source clone="true" xpath="//jsonObject"/>
                <target type="body"/>
            </enrich>
    
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
    

    我想,我无法使用payloadFactory重新创建消息,因为,    “我正在使用rich mediator修改的消息(有效负载)是”来自第三方服务的巨大而动态的响应“。这个响应我需要在我的服务中的许多地方修改/丰富,并将其作为输入发送给另一个第三方服务。

    使用“动态”我的意思是,每次服务收到请求时,消息中的某些内容都是不同的(更改),具体取决于第三方服务收到的请求中的某些因素,该服务将消息作为此服务的输入。

    所以我想我不能像这样使用payloadFactory重新创建消息

    <payloadFactory media-type="json">
             <format>{"id" : $1, "parts" : $2, "make" : "Tamsung"}</format>
              <args>
                         <arg evaluator="json" expression="$.id"></arg>
                         <arg evaluator="json" expression="$.parts"></arg>
              </args>
        </payloadFactory> 
    

    因为它将来自第三方服务的动态响应。所以我们不能在payloadFactory中重新创建它不是静态的消息。

1 个答案:

答案 0 :(得分:0)

使用以下参数在转换发生时保留JSON有效负载中的单个元素数组。

synapse.json.to.xml.processing.instruction.enabled=true

需要在/conf/synapse.properties中添加参数才能实现此功能。最后,重新启动服务器,您将能够解决上述问题。