我有两个REST服务返回一些简单的JSON。我使用克隆中介来调用每个服务,然后将聚合的消息返回给客户端。
问题在于,每当我调用API时,我在ESB输出上都会出现以下错误:
ERROR - OMSourcedElementImpl Could not get parser from data source for element jsonObject
我已经单独测试了相同的REST服务,没有克隆介体,并且它没有问题。
以下是API序列:
<api xmlns="http://ws.apache.org/ns/synapse" name="PolicyQuery" context="/policy/query">
<resource methods="POST">
<inSequence>
<property name="ROOT" scope="default">
<root:rootelement xmlns:root="www.wso2esb.com"/>
</property>
<log level="full"/>
<clone continueParent="true" id="test" sequential="true">
<target>
<sequence>
<send>
<endpoint>
<address uri="http://ip.jsontest.com/" format="rest"/>
</endpoint>
</send>
</sequence>
</target>
<target>
<sequence>
<send>
<endpoint>
<address uri="http://ip.jsontest.com/" format="rest"/>
</endpoint>
</send>
</sequence>
</target>
</clone>
</inSequence>
<outSequence>
<log level="full"/>
<aggregate>
<completeCondition>
<messageCount min="-1" max="-1"/>
</completeCondition>
<onComplete expression="//return" enclosingElementProperty="ROOT">
<property name="messageType" value="application/json" scope="axis2" type="STRING"/>
<send/>
</onComplete>
</aggregate>
</outSequence>
</resource>
</api>
我做错了吗?我使用的是WSO2 5.0.0(我还用4.9.0测试过,我也遇到了同样的问题)。
我发送的请求有效负载是:
{
IdNumber : "8008185315088",
LastName : null
}
答案 0 :(得分:1)
在更新了这样的序列后,这对我来说很好。你能试试吗?
<outSequence>
<log level="full"/>
<aggregate>
<completeCondition>
<messageCount min="2" max="2"/>
</completeCondition>
<onComplete expression="//ip" enclosingElementProperty="ROOT">
<property name="messageType" value="application/json" scope="axis2" type="STRING"/>
<send/>
</onComplete>
</aggregate>
</outSequence>
注意:如果您获得的json格式错误,则可能会出现错误。但是有了这个样本,我没有看到这样的问题。
修改强>:
问题在于json格式。它应该像这样修复。
{
"IdNumber" : "8008185315088",
"LastName" : null
}