2012-10-17 53 views
2

因此,使用Mule ESB,我正在搜索Bing以查找某些PDF文件。然後我解析JSON響應來捕獲文件位置的URL。現在我需要檢索文件並保存在本地。以下是我到目前爲止,但我有一種感覺,我正在做的這一切都是錯誤的。我怎樣才能完成用例?Mule ESB從URL字符串下載文件

我有兩個問題:

1)無法找出如何剝去「HTTP」從#[message.payload.Url](因爲HTTP端點添加HTTP到url我傳入。

2)無法弄清楚如何檢索文件。我甚至不知道HTTP端點是否是正確的選擇。 HTTP?文件?

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

<mule xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:https="http://www.mulesoft.org/schema/mule/https" 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" version="CE-3.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" 
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.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/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
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 "> 
    <flow name="BingFlow1" doc:name="BingFlow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" doc:name="HTTP"/> 
     <https:outbound-endpoint exchange-pattern="request-response" host="api.datamarket.azure.com" port="443" path="Data.ashx/Bing/Search/v1/Web?Query=%27contract%20california%27&amp;WebFileType=%27PDF%27&amp;$top=50&amp;$format=Json" user="********" password="*****" doc:name="Bing"/> 
     <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/> 
     <expression-transformer expression="#[message.payload.d.results]" doc:name="Expression"/> 
     <collection-splitter doc:name="Collection Splitter"/> 
     <http:outbound-endpoint exchange-pattern="request-response" host="#[message.payload.Url]" port="80" method="GET" doc:name="HTTP"/> 
     <file:outbound-endpoint path="/home/user/Documents/output" outputPattern="#[message.payload.ID].pdf" responseTimeout="10000" doc:name="File"/> 
     <echo-component doc:name="Echo"/> 
    </flow> 
</mule> 

回答

3

我無法測試流程,因爲需要一些憑據,但以下應該可以幫助您:

  • 使用expression-transformer剝去HTTP出來,
  • 你有http:outbound-endpoint其次辦法由file:outbound-endpoint將工作正常,
  • 更改http:inbound-endpointone-way:有沒有辦法返回任何合理的,因爲執行流程被拆分。

例如,假設message.payload.Url解析爲java.lang.String,你可以使用:

<expression-transformer expression="#[org.mule.util.StringUtils.substringAfter(message.payload.Url, 'http://')]" doc:name="Expression"/> 
+0

真棒。我只是將入站端點更改爲單向。我回到了其他客戶端,但你是對的......我把它反映到控制檯,所以沒有真正的需要。 – Thaneofife

+0

如何編寫表達式,我在收集分離器後添加了'',但我不知道如何從URL中去除http://。你能否提供一個例子,甚至是文件來說明如何實現這個目標?我沒有在Mule文檔中看到它。 – Thaneofife

+0

沒有特別的文檔:這是MEL(建立在http://mvel.codehaus.org),它允許您訪問任何Java對象,包括在這種情況下'org.mule.util.StringUtils'用於處理字符串。我相應地回顧了我的答案。 –