我想在 WSO2 EI6.6.0 中集成一个 API,其中下游 API 只接受带有 JSON 请求正文的 HTTP 方法 GET,但根据 WSO2 EI,它会忽略使用有效负载工厂设置的 JSON 请求,这就是下游给出错误的原因。下面是我的代码
<sequence name="moz-simo-billpay-general-process-request-seq" xmlns="http://ws.apache.org/ns/synapse">
<payloadFactory media-type="json">
<format>
{
"Document": {
"ServiceReq": {
"Hdr": {
"MsgFctn": "$2",
"PrtcolVrsn": "$3",
"MsgUUID": ""
},
"ReqData": $1
}
}
}
</format>
<args>
<arg evaluator="xml" expression="$ctx:incomingPayload"
literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
<arg evaluator="xml" expression="$ctx:operationCode"
literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
<arg evaluator="xml" expression="$ctx:protocol"
literal="false" xmlns:ns="http://org.apache.synapse/xsd"/>
</args>
</payloadFactory>
<property
expression="fn:concat($ctx:mozSimoBillpayUrl, '/BillPay/V2.0.1.0/Billers')"
name="uri.var.mozSimoBillPayUrl" scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/>
<property name="HTTP_METHOD" scope="axis2" type="STRING" value="GET"/>
<property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
<property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
<property expression="concat('Bearer ',$ctx:bearerToken)"
name="Authorization" scope="transport" xmlns:ns="http://org.apache.synapse/xsd"/>
<call>
<endpoint>
<http uri-template="{uri.var.mozSimoBillPayUrl}">
<timeout>
<duration>120000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<initialDuration>0</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</http>
</endpoint>
</call>
<log level="full"/>
<property expression="json-eval($)" name="response" xmlns:ns="http://org.apache.synapse/xsd"/>
</sequence>
如何在wso2 EI中实现这种场景?
这只是违反 HTTP 规范。 GET 请求不支持发送有效负载,因此您无法使用 WSO2OOB 组件来实现这一点。作为一种解决方法,您可能可以编写一个自定义类中介器,但即使是 WSO2 使用的下划线库(如 Apache HTTP 客户端)也不允许这样做。因此,您必须找到一个允许您发送带有有效负载的 GET 请求的库,并使用它来实现中介器。