2013-10-16 84 views
0

在Mule中,我需要通過java處理通過http post發送的xlsx文件。 如何通過java發佈文件? 我認爲它通過騾消息是可達但MuleESB - 從http文件中獲取文件

eventContext.getMessage().getOutboundAttachmentNames() 

既不

eventContext.getMessage().getInboundAttachmentNames() 

得出的結果。

任何想法?

使HTTP POST測試,我以這種方式使用捲曲:

curl --form [email protected] --form press=OK http://localhost:8088/HttpController 

流量僅僅是這樣的:

<flow name="xlsx_to_xls_converterFlow1" doc:name="xlsx_to_xls_converterFlow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" doc:name="HTTP" address="http://localhost:8088/HttpController"/> 
     <logger level="INFO" doc:name="Logger"/> 
     <component class="Convert_XLSXtoXLS" doc:name="Java"/> 
</flow> 

謝謝

修訂

要讓已標記的解決方案可以覆蓋HttpMultipartM的extractPayloadFromHttpRequest uleMessageFactory選擇正確的輸入文件名。 實際上與當前HttpMultipartMuleMessageFactory執行文件上傳僅當輸入的文件名=「有效載荷」

回答

3

您需要配置HTTP連接器來處理多部分請求得到他們的附件。添加了XML配置中執行以下操作:

<service-overrides messageFactory="org.mule.transport.http.HttpMultipartMuleMessageFactory"/> 

(如果你認爲這很麻煩,請給予好評https://www.mulesoft.org/jira/browse/MULE-6862

+0

謝謝,它工作。 Upvoted。 – user1820620

+0

實際上這並不足以改變messageFactory。我更新了將解​​決方案放在那裏的問題。 – user1820620

0

把一個http後面的Java組件:入站終點結果在一個InputStream作爲參數對組成的方法。

你必須與輸入流工作或只是把回聲之間:

<flow name="FileUpload" doc:name="FileUpload"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="9090" doc:name="HTTP"/> 
    <echo-component doc:name="Echo"/> 
    <component class="de.codecentric.basics.FileUploadComponent" doc:name="Java"/> 
</flow> 

該組件具有一個方法:

包de.codecentric.basics;

公共類FileUploadComponent {

public String process(String message) { 
System.out.println("message: " + message); 
return "OK"; 
} 

}

你還有在這種情況下解析多形式的數據。

或者嘗試使用REST組件,請參閱:http://www.javaroots.com/2013/05/createfileuploadmulejerseyrest.html

+1

@大衛:解決方案的工作,但上傳必須命名爲「有效載荷」,例如:curl --form [email protected] http:// localhost:9090如果HttpMultiPartMuleMessageFactory解析所有部分並將它們放在名稱爲鍵的Map中會更好。附加說明:服務覆蓋必須位於連接器中,而不是端點中。 –