0

ミュールのバージョン: 3.7.3

Anypoint スタジオ: 5.4.0

DataWeave を学習するために、Twitter 検索を実行し、各ツイートをループ処理し、DataWeave を使用してペイロードを圧縮し、結果をログに記録する単純なフローを作成しました。私が直面している問題は、json が DW から出てくる null のように見えることです。

DW の前のツイート テキスト:

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

DW からのペイロードは null ではありません:

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

ただし、ログに出力する場合、「tweet」json 要素は null です。

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

これが私のラバの流れの例です:

    <?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>

マッピングのスクリーンショット: ここに画像の説明を入力

私が物事を台無しにしている可能性のあるアイデアはありますか?

4

1 に答える 1

1

for each スコープに DataWeave トランスフォーマーを配置しないでください。

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

于 2015-12-17T21:39:27.767 に答える