【问题标题】:Mule DataWeave JSON content is nullMule DataWeave JSON 内容为空
【发布时间】:2015-12-17 18:56:01
【问题描述】:

骡子版本:3.7.3

Anypoint Studio:5.4.0

为了学习 DataWeave,我创建了一个简单的流程来执行 twitter 搜索,循环遍历每条推文,尝试使用 DataWeave 压缩有效负载,然后记录结果。我遇到的问题是从 DW 出来的 json 似乎为空。

DW 之前的推文:

Welcome to the world of #APILedConnectivity Lebron James! Your request has been processed by #MuleSoft #AnypointPlatform @ 1986

DW出来的payload不为空:

org.mule.api.processor.LoggerMessageProcessor: DW Payload: com.mulesoft.weave.mule.WeaveMessageProcessor$WeaveOutputHandler@1657d772

但是,'tweet' json 元素在输出到日志时为空:

org.mule.api.processor.LoggerMessageProcessor: Found Tweet: null

这是我的 mule 流程示例:

    <?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:twitter="http://www.mulesoft.org/schema/mule/twitter" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/twitter http://www.mulesoft.org/schema/mule/twitter/current/mule-twitter.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd">
    <flow name="test-dataweaveFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
        <twitter:search config-ref="TwitterConnection" query="#[json:hashtag]" doc:name="Twitter"/>
        <foreach collection="#[payload.tweets]" doc:name="For Each">
            <logger message="Payload before DW: #[payload.text]" level="INFO" doc:name="Logger"/>
            <dw:transform-message metadata:id="99e88418-ce6a-4d18-a900-6c35d7f36c83" doc:name="Transform Message">
                <dw:input-payload doc:sample="QueryResult.dwl"/>
                <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{ 
    tweet: {
        screenName: payload.user.screenName,
        tweetId: payload.id,
        tweetContent: payload.text
    }
}
]]></dw:set-payload>
            </dw:transform-message>
            <logger message="DW Payload: #[payload]" level="INFO" doc:name="Logger"/>
            <logger message="Found Tweet: #[payload.tweet]" level="INFO" doc:name="Logger"/>
        </foreach>
        <json:object-to-json-transformer doc:name="Object to JSON"/>
    </flow>
</mule>

映射截图:

有什么想法我可能会把事情搞砸吗?

【问题讨论】:

    标签: mule dataweave


    【解决方案1】:

    不要将 DataWeave 转换器放在 for each 作用域中!

    您可以在 DataWeave 中进行迭代,这可能会给您带来更好的结果。

    您将从有效负载创建地图,地图操作员接受一个集合。

    twitter 连接器将为您提供 JSON 对象的集合。

    这里的线索是,将 DataWeave 转换器拖到 Twitter 连接器之后。

    将提供 DataWeave 中的输入数据,并且您将在 DataWeave 脚本中自动完成。

    文档:https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation

    这里有一些关于如何映射表单 JSON 的例子:

    https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-examples#json-to-xml

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2021-02-22
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      相关资源
      最近更新 更多