如何在Mule 4中将数据从对象转换为字符串?

时间:2019-02-15 08:13:38

标签: mule converters

当我需要使用need子3 [message.payloadAs(java.lang.String)]中的语法在控制台上记录有效负载时,我曾经将有效负载转换为字符串,有时还使用对象到字符串转换器或对象数组转换器。

但是在m子4中,我看不到任何转换器,而在m子3中,[message.payloadAs(java.lang.String)]仍然无法正常工作。

请帮助我在m子4中引入组件或概念的任何新语法?

输入

[
        {
            "firstName": "Ram",
            "lastName": "Ram1",
            "address": [
                {
                    "street": "a",
                    "city": "b",
                    "state": "c"
                },
                {
                    "street": "a1",
                    "city": "b1",
                    "state": "c1"
                }
            ]
        }

批处理图像 enter image description here

代码

        <batch:job jobName="Batch_ProcessingBatch_Job" doc:id="2582eccb-720f-499f-99fe-424cab3c9a33" >
            <batch:process-records >
                <batch:step name="Batch_Step1" doc:id="cb045f6b-edd3-426f-8f28-0d20b301fb6d" >
                    <logger level="INFO" doc:name="Logger" doc:id="2491184f-e8d7-47b7-bef0-29bafd43247f" message="In Batch_step1........... #[payload]"/>
                    <batch:aggregator doc:name="Batch Aggregator" doc:id="aa9c1b60-395f-4376-804d-bced200dfb43" size="2">
                        <set-payload value='#[write(payload, "application/json")]' doc:name="Set Payload" doc:id="9d4b27ee-5692-4a99-a93e-bd7c694f398d" />
                        <ee:transform doc:name="Transform Message" doc:id="06064422-1352-4ff9-8817-3e87eb1f4264" >
                            <ee:message >
                                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map(item,index) -> {
    name: item.firstName,
    surname: item.lastName 
}]]></ee:set-payload>
                            </ee:message>
                        </ee:transform>
                        <logger level="INFO" doc:name="Logger" doc:id="c955490e-fab1-436e-8265-f706a577c9d2" message="In Batch_step1 Aggrigator........... #[payload]" />
                    </batch:aggregator>
                </batch:step>
            </batch:process-records>
            <batch:on-complete >
                <logger level="INFO" doc:name="Logger" doc:id="a3923c90-557b-4955-9c40-afd748719abd" message="#['#####It is oncomplete result####': write(payload, &quot;application/json&quot;)]"/>
            </batch:on-complete>
        </batch:job>

遇到错误

Message               : "You called the function 'map' with these arguments: 
  1: String ("[\n  \"{\\n  \\\"firstName\\\": \\\"Ram\\\",\\n  \\\"lastName\\\": \\\"Ram1\...)
  2: Function ((item:Any, index:Any) -> ???)

But it expects arguments of these types:
  1: Array
  2: Function


4| payload map(item,index) -> {
 |  ...
7| }

Trace:
  at map (line: 4, column: 1)
  at main (line: 4, column: 9)" evaluating expression: "%dw 2.0
output application/json
---
payload map(item,index) -> {
    name: item.firstName,
    surname: item.lastName 
}".
Error type            : MULE:EXPRESSION
Element               : Batch_ProcessingFlow/processors/0/route/0/route/0/aggregator/processors/1 @ training-1:Batch Processing.xml:27 (Transform Message)
Element XML           : <ee:transform doc:name="Transform Message" doc:id="06064422-1352-4ff9-8817-3e87eb1f4264">
<ee:message>
<ee:set-payload>%dw 2.0
output application/json
---
payload map(item,index) -> {
    name: item.firstName,
    surname: item.lastName 
}</ee:set-payload>
</ee:message>
</ee:transform>

  (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

2 个答案:

答案 0 :(得分:0)

快速浏览后,新方法是使用link中所示的#[message.payload as String]

答案 1 :(得分:0)

您可以对记录器使用payload.^raw语法。它是在m子4中引入的,可以处理需要字符串转换的情况。通常在记录器中与output text/plain格式匹配良好。

参考:https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-extract-data#metadata_selector

请注意,记录整个有效负载(可能包含PII等)从来都不是一个好主意,除非您正在构建一个需要在批处理过程结束时记录的报告,就是这种情况...