2012-03-06 75 views
2

我一直在努力通過SO和Mule論壇,但找不到可行的解決方案。 esb接受一個包含id的單個請求,該請求創建一個由相關id列表組成的XML有效載荷。然後將這個XML有效載荷分離併發送到一個轉換器,該轉換器將每個相關的id獲取一些元數據。然後結果應該結合在一起以形成XML響應。我遇到的問題是,無論我如何轉換最終結果集,我總是使用封裝字符串「?? sr)java.util.concurrent.CopyOnWriteArrayListx]取回文檔....」「xMule Esb 3.2.1:收集分離器的結果並將結果輸出爲XML

任何想法/意見將不勝感激

這裏是我使用的騾子配置:。


<http:connector name="HttpConnector" doc:name="HTTP\HTTPS"/> 
<expression-transformer name="ExtractId" doc:name="Expression"> 
    <return-argument evaluator="xpath" expression="//string[1]"/> 
</expression-transformer> 
<flow name="myFlow1" doc:name="myFlow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="incoming/path/" connector-ref="HttpConnector" doc:name="HTTP"/> 
    <custom-transformer encoding="UTF-8" class="mycomponents.transformers.SubscriberRequestTransformer" doc:name="Create Hub Id Requests"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 

    <splitter evaluator="xpath" expression="//entry/list/string" enableCorrelation="ALWAYS" doc:name="Splitter"/> 
    <transformer ref="ExtractId" doc:name="Transformer Reference"/> 
    <logger message="#[payload:]" level="INFO" doc:name="Logger"/> 
    <custom-transformer encoding="UTF-8" class="mycomponents.transformers.HubQueryProcessor" doc:name="Create Hub Id Requests"/> 
    <collection-aggregator /> 
    <component class="mycomponents.TopicResponseAggregatorComponent" doc:name="Collect requests" /> 
    <logger message="Aggregated Content (#[groovy:payload.size()] elements): \n#[payload:]" level="INFO" doc:name="Logger"/>   
    <logger message="#[payload:]" level="INFO" doc:name="Logger"/> 

</flow> 

我已經解決了問題。雖然我不太理解它爲什麼不同但我假設它與一些騾子的「魔法」有關。我把流量分成多個流量,這是我最終要做的。但是,通過這樣做,問題就消失了。

FYI:這裏是更新後的流程:

<flow name="myFlow1" doc:name="myFlow1"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="url/for/service/" connector-ref="HttpConnector" doc:name="HTTP"/> 
    <flow-ref name="createHubIdRequestsFlow" doc:name="Map To Hub Ids" doc:description="Takes in the situation id passed in by the client. Does the query lookup versus the content mapping tables. creates the correspondng requests for meta data information to the provider(s)"/> 
    <flow-ref name="getTopicRequests" doc:name="Process Provider Reponses" doc:description="For each JSON response returned from the provider, transform it into an XML representation of that data"/> 
    <flow-ref name="buildResponseFlow" doc:name="Build final response" doc:description="piece all the messages together into a single object as a string"/> 

    <response> 
     <message-properties-transformer> 
      <add-message-property value="text/xml" key="Content-Type" /> 
     </message-properties-transformer> 
    </response> 
</flow> 

回答

3

默認情況下,郵件屬性變壓器賣場新的屬性,在「調用」的範圍。您需要在「出站」範圍內設置內容類型,以便入站HTTP端點在響應階段使用它。

試試這個:

<response> 
     <message-properties-transformer scope="outbound"> 
      <add-message-property value="text/xml" key="Content-Type" /> 
     </message-properties-transformer> 
    </response> 
+0

沒有不起作用。它所做的只是逃避所有的標籤。如果我在工作流程結束之前將有效載荷輸出到控制檯,一切看起來都不錯。它返回我想要的XML。但是在此之後,它返回的是XML(有效載荷)前綴 ** ?? sr)java.util.concurrent.CopyOnWriteArrayListx]?F ?? xpwt? x ** – 2012-03-06 23:06:11

+0

您的建議會將輸出內容中的所有標籤都放在「」中。 – 2012-03-06 23:18:11

+0

您可以編輯您的問題併發布與myFlow1的一次交互的日誌內容嗎?爲了保護隱私,我使用了XML。 – 2012-03-07 17:21:08