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>
没有不起作用。它所做的只是逃避所有的标签。如果我在工作流程结束之前将有效载荷输出到控制台,一切看起来都不错。它返回我想要的XML。但是在此之后,它返回的是XML(有效载荷)前缀 ** ?? sr)java.util.concurrent.CopyOnWriteArrayListx]?F ?? xpwt? x ** –
2012-03-06 23:06:11
您的建议会将输出内容中的所有标签都放在“”中。 –
2012-03-06 23:18:11
您可以编辑您的问题并发布与myFlow1的一次交互的日志内容吗?为了保护隐私,我使用了XML。 – 2012-03-07 17:21:08