Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何从Mule Flow发布到REST api?_Json_Rest_Post_Esb_Mule - Fatal编程技术网

Json 如何从Mule Flow发布到REST api?

Json 如何从Mule Flow发布到REST api?,json,rest,post,esb,mule,Json,Rest,Post,Esb,Mule,我需要一些关于Mule 3 esb的帮助。我正在从JMS队列读取一条消息,然后我想将该消息的某些部分发布到外部REST api并处理响应。我以前只使用Mule与数据库通信,从未使用过web服务。你能帮我弄清楚我需要做什么才能正确地发布到这个api并处理响应吗。我应该使用java组件而不是在流中使用它吗 下面是来自JMS队列的示例XML消息 <longUrl>http://www.cnn.com</longUrl> http://www.cnn.com 这是我的流程 &

我需要一些关于Mule 3 esb的帮助。我正在从JMS队列读取一条消息,然后我想将该消息的某些部分发布到外部REST api并处理响应。我以前只使用Mule与数据库通信,从未使用过web服务。你能帮我弄清楚我需要做什么才能正确地发布到这个api并处理响应吗。我应该使用java组件而不是在流中使用它吗

下面是来自JMS队列的示例XML消息

<longUrl>http://www.cnn.com</longUrl>
http://www.cnn.com
这是我的流程

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

在发布到Google API之前,您需要将XML转换为JSON

我分两步来做:

  • 使用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>
{
 "kind": "urlshortener#url",
 "id": "http://goo.gl/2ViC",
 "longUrl": "http://www.cnn.com/"
}