REST API:使用Aggregate和Iterate Mediator的问题

时间:2013-06-04 07:23:06

标签: rest wso2 wso2esb wso2dss

enter image description here

错误消息: [2013-06-04 11:26:41,039] INFO - LogMediator To:http://www.w3.org/2005/08/addressing/anonymous,WSAction:,SOAPAction :, MessageID:urn:uuid:fce9fc4f-a071-4f62-8b5f-e982cf404619,Direction:response,Envelope :不是GZIP格式 [2013-06-04 11:26:41,055]错误 - 评估表达式的AggregateMediator错误:/ PACKAGE_OFFERS org.apache.synapse.SynapseException:找不到要聚合的匹配元素。         在org.apache.synapse.mediators.eip.EIPUtils.enrichEnvelope(EIPUtils.java:149)         at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.getAggregatedMessage(AggregateMediator.java:393)         at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.completeAggregate(AggregateMediator.java:340)         at org.apache.synapse.mediators.eip.aggregator.AggregateMediator.mediate(AggregateMediator.java:285)         在org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)         在org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)         在org.apache.synapse.rest.Resource.process(Resource.java:297)         在org.apache.synapse.rest.API.process(API.java:265)         在org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76)         在org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:50)         at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:182)         在org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:443)         在org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:166)         在org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)         在org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:217)         在org.apache.axis2.transport.base.threads.NativeWorkerPool $ 1.run(NativeWorkerPool.java:172)         在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)         at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)         在java.lang.Thread.run(Thread.java:722) [2013-06-04 11:27:21,022] WARN - SourceHandler读取请求后的连接超时:fe80:0:0:0:b1ac:716:923:abd3%33:61567-> fe80:0:0 0:b1ac:716:923:ABD3%33:8280

我有一个REST API调用两个DataServer服务DS-1和DS-2,在调用DS-1 [XML over REST-GET]之后,我对一些重复元素执行迭代并调用DS-2 [XML over REST-GET]。在这样做的时候,我得到了上面列出的错误。我正在尝试获取正确的元素。如果需要任何其他配置,请与我们联系。

有关源代码,请参阅此 LINK.

3 个答案:

答案 0 :(得分:0)

您使用接收序列。因此,第一个端点的结果(响应)将在该序列中接收(即:迭代seq)。之后没有接收序列。消息流被破坏。您在初始序列中使用了聚合,这没有意义,因为第一个端点的响应将在iterate-seq处接收。

因此,聚合将针对您发送给API的初始请求发生。

答案 1 :(得分:0)

如下所述,您可以在关闭<send/>之前尝试添加<inSequence>调解员。

            </case>
            <default/>
        </switch>
**<send/>**
    </inSequence>

这将确保outSequence将收到您的请求。

答案 2 :(得分:-2)

如果您还没有决定使用任何esb ...请考虑使用UltraESB