为什么下面的聚合器中介不起作用?



我正在使用WSO2 Integration Studio创建一个简单的复合应用程序。我正在尝试做的是使用切换中介来路由传入请求并获得响应,之后需要调用2个其他端点,并且来自这两个端点(CarTyreEndpoint, CarEngineEndpoint)的JSON响应需要聚合并发送到客户端。到目前为止,除了这个聚合器部分之外,一切都很好。它不工作,甚至什么都没有打印。有人能帮我解决这个问题吗?提前谢谢。

<?xml version="1.0" encoding="UTF-8"?>
<api context="/cars" name="Cars"
xmlns="http://ws.apache.org/ns/synapse">
<resource methods="PUT" uri-template="/car">
<inSequence>
<property expression="$trp:Model" name="model" scope="default" type="STRING"/>
<switch source="get-property('model')">
<case regex="some|models|...">
<call>
<endpoint key="CarEndpoint"/>
</call>
</case>
<default>
<respond/>
</default>
</switch>
<property expression="json-eval($.CarEndpointResult.Car)" name="car" scope="default" type="STRING"/>
<header expression="get-property('car')" name="Car" scope="transport"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
<call>
<endpoint key="CarTyreEndpoint"/>
</call>
<call>
<endpoint key="CarEngineEndpoint"/>
</call>
<aggregate>
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete aggregateElementType="root" expression="$body">
<log level="full">
<property expression="$body" name="Response Body"/>
</log>
<respond/>
</onComplete>
</aggregate>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>

聚合中介与IterateClone中介耦合。基本上,当您使用上述中介对中介流进行分支时,您可以使用聚合中介来组合每个分支中的响应。

您要做的是服务编排之类的事情。因此,您需要做的是调用每个端点,将每个端点的有效负载保存到一个属性,然后在最后使用PayloadFactory Mediator之类的东西将它们组合在一起。看一下这个例子。

为您的用例提供参考代码。

<property expression="json-eval($.CarEndpointResult.Car)" name="car" scope="default" type="STRING"/>
<header expression="get-property('car')" name="Car" scope="transport"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"/>
<call>
<endpoint key="CarTyreEndpoint"/>
</call>
<property expression="json-eval($)" name="carType" scope="default" type="STRING"/>
<call>
<endpoint key="CarEngineEndpoint"/>
</call>
<property expression="json-eval($)" name="carEngine" scope="default" type="STRING"/>
<payloadFactory media-type="json">
<format>
{
"Type": $1,
"Engine": $2,
}
</format>
<args>
<arg expression="$ctx:carType" />
<arg expression="$ctx:carEngine"/>
</args>
</payloadFactory>

最新更新