2016-03-11 27 views
0

我正在開發一個使用Mule ESB的集成,它需要從文件系統讀取二進制文件(.zip)並將其創建爲Salesforce中的附件。但是,我無法獲得此項工作,並且出現以下錯誤:Mule ESB:讀取二進制文件並在Salesforce中創建附件

INFO 2016-03-11 13:55:47,338 [[sfdc].File.receiver.01]  org.mule.transport.file.FileMessageReceiver: Lock obtained on file: /Users/aaa/Desktop/temp/files/test.zip 
INFO 2016-03-11 13:55:47,345 [[sfdc].sfdcFlow.stage1.02] org.mule.api.processor.LoggerMessageProcessor: Payload = [email protected] 
INFO 2016-03-11 13:55:47,348 [[sfdc].sfdcFlow.stage1.02] com.mulesoft.weave.mule.utils.MuleWeaveFactory$: MimeType was not resolved 'application/zip' delegating to Java. 
ERROR 2016-03-11 13:55:47,367 [[sfdc].sfdcFlow.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy: 
Message    : Could not find a transformer to transform "SimpleDataType{type=java.util.LinkedHashMap, mimeType='*/*', encoding='null'}" to "CollectionDataType{type=java.util.List, itemType=java.lang.Object, mimeType='*/*'}". 
Type     : org.mule.api.transformer.TransformerException 
Code     : MULE_ERROR-236 
JavaDoc    : http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html 
Exception stack is: 
1. Could not find a transformer to transform "SimpleDataType{type=java.util.LinkedHashMap, mimeType='*/*', encoding='null'}" to "CollectionDataType{type=java.util.List, itemType=java.lang.Object, mimeType='*/*'}". (org.mule.api.transformer.TransformerException) 
org.mule.registry.MuleRegistryHelper:248 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transformer/TransformerException.html) 
Root Exception stack trace: 
org.mule.api.transformer.TransformerException: Could not find a transformer to transform "SimpleDataType{type=java.util.LinkedHashMap, mimeType='*/*', encoding='null'}" to "CollectionDataType{type=java.util.List, itemType=java.lang.Object, mimeType='*/*'}". 

這是配置文件。

<sfdc:config name="Salesforce__Basic_Authentication" username="[email protected]" password="password" securityToken="token" url="https://test.salesforce.com/services/Soap/u/34.0" doc:name="Salesforce: Basic Authentication"/> 
<file:connector name="File" readFromDirectory="/Users/aaa/Desktop/temp/files" autoDelete="true" streaming="true" validateConnections="true" doc:name="File"/> 
<flow name="sfdcFlow"> 
    <file:inbound-endpoint path="/Users/aaa/Desktop/temp/files" connector-ref="File" responseTimeout="10000" doc:name="File"/> 
    <logger message="Payload = #[payload]" level="INFO" doc:name="Logger"/> 
    <object-to-byte-array-transformer doc:name="Object to Byte Array"/> 
    <dw:transform-message doc:name="Transform Message"> 
     <dw:set-payload><![CDATA[%dw 1.0 
%output application/java 
--- 
{ 
ParentId: "b2U7A0B01054OyZ", 
Name: "Test Name", 
Description: "Test Descr", 
Body: payload 
}]]></dw:set-payload> 
    </dw:transform-message> 

    <sfdc:create config-ref="Salesforce__Basic_Authentication" type="Attachment" doc:name="Salesforce" /> 
</flow> 

我檢查了Anypoint交換和谷歌搜索,但我得到的所有指針是針對文本文件(如CSV)。欣賞是否有人可以共享一個工作示例來讀取二進制文件並將其作爲Salesforce中的附件創建(可附加到任何對象,如大小寫對象)。

我使用Anypoint Studio 5.4.1和Mule運行時3.7.3 EE。

編輯:我能解決這個問題。基本上,正如@david所說,創建方法需要一個集合,我沒有將它作爲集合傳遞。這裏是更新的代碼(只是數據編輯部分):

[ 
    { 
    ParentId: "b2U7AB010540yZ", 
    Name: "Test Name", 
    Description: "Test Descr", 
    Body: payload 
    } 
] 

請注意方括號的開放和關閉。謝謝@david。

回答

1

我從SFDC連接器文檔中瞭解到,create method需要一組對象。

但你傳遞一個map到它,因此該例外:

Could not find a transformer to transform "SimpleDataType{type=java.util.LinkedHashMap, mimeType='*/*', encoding='null'}" to "CollectionDataType{type=java.util.List, itemType=java.lang.Object, mimeType='*/*'}" 

嘗試增加你dw:transform-message創建的列表中選擇地圖,使用變壓器這一點,它應該工作。