Dataweave变压器有效载荷中使用的Mule if flowVar转换为Map

Dataweave变压器有效载荷中使用的Mule if flowVar转换为Map,mule,mule-el,Mule,Mule El,我遇到Mule Dataweave Transformer出错的问题,只有在以下情况下才会发生这种情况:- 存在一个enricher,将json:json包装到对象转换器 <enricher target="#[flowVars.myVar]" doc:name="Message Enricher"> <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to

我遇到Mule Dataweave Transformer出错的问题,只有在以下情况下才会发生这种情况:-

  • 存在一个enricher,将json:json包装到对象转换器

     <enricher target="#[flowVars.myVar]" doc:name="Message Enricher"> 
        <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
    </enricher>
    
    
    
  • Dataweave转换器中涉及flowVar

  • 异常发生在第二个dataweave上:-

    ERROR 2017-08-15 09:09:52,239 [amqpReceiver.02] org.mule.exception.RollbackMessagingExceptionStrategy: 
    ********************************************************************************
    Message               : Exception while executing: 
    {bar=1, foo=0}
     ^
    Unexpected character 'b' at index 1 (line 1, position 2), expected '"'
    Payload               : com.mulesoft.weave.reader.ByteArraySeekableStream@39e7a0d3
    Element               : /subscribe-to-changeFlow4/processors/4 @ voa-009-mule-authorisation-search-api:test3.xml:58 (Transform Message)
    Element XML           : <dw:transform-message doc:name="Transform Message">
                            <dw:input-payload mimeType="application/json"></dw:input-payload>
                            <dw:set-payload>%dw 1.0%output application/json---{field1: payload.foo,field2: payload.bar,field3: flowVars.myFlowVar}</dw:set-payload>
                            </dw:transform-message>
    --------------------------------------------------------------------------------
    Root Exception stack trace:
    com.mulesoft.weave.reader.json.JsonReaderException: Unexpected character 'b' at index 1 (line 1, position 2), expected '"'
        at com.mulesoft.weave.reader.json.JsonTokenizer.fail(JsonTokenizer.scala:193)
        at com.mulesoft.weave.reader.json.JsonTokenizer.require(JsonTokenizer.scala:190)
        at com.mulesoft.weave.reader.json.JsonTokenizer.readString(JsonTokenizer.scala:74)
        at com.mulesoft.weave.reader.json.JsonTokenizer.readObjectMembers(JsonTokenizer.scala:146)
        at com.mulesoft.weave.reader.json.JsonTokenizer.com$mulesoft$weave$reader$json$JsonTokenizer$$readObject(JsonTokenizer.scala:140)
        at com.mulesoft.weave.reader.json.JsonTokenizer$$anonfun$readValue$1.apply$mcV$sp(JsonTokenizer.scala:37)
    
    ERROR 2017-08-15 09:09:52239[amqpceiver.02]org.mule.exception.rollbackMessaginException策略:
    ********************************************************************************
    消息:执行时发生异常:
    {bar=1,foo=0}
    ^
    索引1(第1行,位置2)处的意外字符“b”,应为“”
    有效载荷:com.mulesoft.weave.reader。ByteArraySeekableStream@39e7a0d3
    元素:/subscribe-to-changeFlow4/processors/4@voa-009-mule-authorization-search-api:test3.xml:58(转换消息)
    元素XML:
    %dw 1.0%输出应用程序/json---{field1:payload.foo,field2:payload.bar,field3:flowVars.myFlowVar}
    --------------------------------------------------------------------------------
    根异常堆栈跟踪:
    com.mulesoft.weave.reader.json.JsonReaderException:索引1(第1行,位置2)处的意外字符“b”,应为“'
    位于com.mulesoft.weave.reader.json.JsonTokenizer.fail(JsonTokenizer.scala:193)
    位于com.mulesoft.weave.reader.json.JsonTokenizer.require(JsonTokenizer.scala:190)
    位于com.mulesoft.weave.reader.json.JsonTokenizer.readString(JsonTokenizer.scala:74)
    位于com.mulesoft.weave.reader.json.JsonTokenizer.readObjectMembers(JsonTokenizer.scala:146)
    位于com.mulesoft.weave.reader.json.JsonTokenizer.com$mulesoft$weave$reader$json$JsonTokenizer$$readObject(JsonTokenizer.scala:140)
    在com.mulesoft.weave.reader.json.JsonTokenizer$$anonfun$readValue$1.apply$mcV$sp(JsonTokenizer.scala:37)
    
    一旦将flowVar添加到第二个数据编织中,则负载似乎显示为一个映射而不是JSON

    • 需要使用带有嵌套json到对象转换器的enricher来获取有效负载并允许访问json。如果卸下浓缩器,效果良好
    • 在json到对象转换器之后,需要seek(0)将流重置为
    • 如果从第二个dataweave中删除flowVar,则其工作正常
    测试用例

      <flow name="subscribe-to-changeFlow4" processingStrategy="synchronous">
    
            <amqp:inbound-endpoint numberOfChannels="1" ref="authorisationChangeQueueDef4" responseTimeout="10000" doc:name="authorisation-change-consumer" />
    
            <dw:transform-message doc:name="Transform Message">
            <dw:set-payload>
    <![CDATA[%dw 1.0
    %output application/json
    ---
    {
        foo:0,
        bar:1
    }]]>
            </dw:set-payload>
        </dw:transform-message>
    
        <enricher target="#[flowVars.myVar]" doc:name="Message Enricher"> 
            <json:json-to-object-transformer returnClass="java.util.HashMap" doc:name="JSON to Object"/>
        </enricher>
    
        <expression-component doc:name="Expression">
            <![CDATA[payload.seek(0);]]>
        </expression-component>
    
        <set-variable variableName="myFlowVar" value="1234" doc:name="Variable" />
    
        <dw:transform-message doc:name="Transform Message">
            <dw:input-payload mimeType="application/json"/>
            <dw:set-payload>
    <![CDATA[%dw 1.0
    %output application/json
    ---
    {   
        field1: payload.foo,
        field2: payload.bar,
        field3: flowVars.myFlowVar
    }
    ]]> 
            </dw:set-payload>
        </dw:transform-message>
    
        <logger  level="INFO" message="#[message.payloadAs(java.lang.String)]" doc:name="Logger all "/>
    
    
        </flow>
    

    这可能是Mule中的一个错误,您可以在

    您使用的是哪个Mule运行时版本

    我在本地进行了测试,使用Mule运行时3.8.0和Mule运行时3.8.1发现了这个问题:

    但是使用Mule运行时3.8.2和Mule3.8.5
    还使用Mule3.7.3进行了局部测试,其工作良好,如下所示:-


    这可能是骡子身上的一个错误,你可以在

    您使用的是哪个Mule运行时版本

    我在本地进行了测试,使用Mule运行时3.8.0和Mule运行时3.8.1发现了这个问题:

    但是使用Mule运行时3.8.2和Mule3.8.5
    还使用Mule3.7.3进行了局部测试,其工作良好,如下所示:-


    我遇到了类似的问题,DW处理器弄乱了有效负载。因此,我在DW transformer之前的字符串中添加了一个对象,效果很好。

    我遇到了类似的问题,DW处理器弄乱了有效负载。所以我在DW transformer之前向String添加了一个对象,效果很好