1

Mule 3 esb について助けが必要です。JMS キューからメッセージを読み込んでおり、このメッセージの一部を外部 REST API に POST して応答を処理したいと考えています。以前はデータベースと対話するためにのみ Mule を使用しており、Web サービスには使用したことがありません。このAPIに正しくPOSTして応答を処理するために何をする必要があるかを理解するのを手伝ってもらえますか. フローで行うのではなく、Java コンポーネントを使用する必要がありますか?

以下は、JMS キューからのサンプル XML メッセージです。

<longUrl>http://www.cnn.com</longUrl>

これが私の流れです

<flow name="myFlow" doc:name="myFlow">

    <jms:inbound-endpoint queue="input" connector-ref="jmsConnector" doc:name="JMS">
        <jms:transaction action="ALWAYS_BEGIN"/>
    </jms:inbound-endpoint>        

    <logger message="#[payload]" level="INFO" doc:name="Logger"/>

    <choice doc:name="Choice">
        <when expression="payload.size() &gt; 0" evaluator="groovy">
            <processor-chain>
                <logger message="****** Create short url *******" level="INFO" doc:name="Logger"/>                                        
                <https:outbound-endpoint method="POST" exchange-pattern="request-response" address="https://www.googleapis.com/urlshortener/v1/url" contentType="application/json" doc:name="HTTP"/>
            </processor-chain>
        </when>
        <otherwise>
            <processor-chain>
                <message-properties-transformer doc:name="Message Properties">
                    <add-message-property key="Content-Type" value="text/plain"/>
                </message-properties-transformer>
                <expression-transformer doc:name="Expression">
                    <return-argument evaluator="string" expression="no parameter is given!"/>
                </expression-transformer>
            </processor-chain>
        </otherwise>
    </choice>      

</flow>
4

1 に答える 1

2

Google API に POST する前に、XML を JSON に変換する必要があります。

私はこれを2つのステップで行いました:

  • XPath で長い URL を抽出し、そこからマップを作成します。
  • マップを JSON に変換します。

関連する構成ビットは次のとおりです。

<processor-chain>
    <logger message="****** Create short url *******"
        level="INFO" doc:name="Logger" />
    <expression-transformer expression="['longUrl':xpath('/longUrl').stringValue]" />
    <json:object-to-json-transformer />
    <https:outbound-endpoint
        method="POST" exchange-pattern="request-response"
        address="https://www.googleapis.com/urlshortener/v1/url"
        contentType="application/json" doc:name="HTTP" />
</processor-chain>

これにより、正しい JSON 応答が得られます。

{
 "kind": "urlshortener#url",
 "id": "http://goo.gl/2ViC",
 "longUrl": "http://www.cnn.com/"
}
于 2012-07-23T17:18:39.283 に答える