如何在WSO2 EI6.6.0中使用Json请求体调用HTTP GET API

问题描述 投票:0回答:1

我想在 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中实现这种场景?

wso2 wso2-esb wso2-api-manager wso2-enterprise-integrator
1个回答
0
投票

这只是违反 HTTP 规范。 GET 请求不支持发送有效负载,因此您无法使用 WSO2OOB 组件来实现这一点。作为一种解决方法,您可能可以编写一个自定义类中介器,但即使是 WSO2 使用的下划线库(如 Apache HTTP 客户端)也不允许这样做。因此,您必须找到一个允许您发送带有有效负载的 GET 请求的库,并使用它来实现中介器。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.