2012-07-23 83 views
1

我需要一些帮助Mule 3 esb。我正在阅读来自JMS队列的消息,然后我想将此消息的某些部分发布到外部REST API并处理响应。我只使用Mule在数据库之前与Web服务进行交谈。你能帮我弄清楚我需要做什么才能正确地POST这个API并处理响应。我应该使用java组件而不是在流程中使用它吗?如何从Mule Flow发布到REST API?

这里是从JMS队列

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

一个示例XML消息,这是我的流量

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

回答

2

您需要发布到谷歌API之前将XML转换成JSON。

我做了这两个步骤:

  • 提取长的URL与XPath和创建地图出来,
  • 变换地图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/" 
} 
+0

非常感谢大卫。 – Kawika 2012-07-25 10:13:53