WSO2 Integrator:REST API GET 请求缺少响应正文

WSO2 Integrator: REST API GET Request missing response body

我正在使用 WSO2 Integrator 6.6.0 对 returns JSON 响应的 REST API 进行阻塞 HTTP GET (HTTP 200 正常)。

但我从未在我的序列中看到响应主体。我不确定我做错了什么,已经用尽了所有可用的文档和其他线程。

执行调用的序列(简化为匿名),随后记录响应:

<!-- Remove XML body as not needed for GET request -->
<payloadFactory media-type="json">
    <format></format>
    <args></args>
</payloadFactory>
<header name="Accept" value="application/json" scope="transport"/>
<property name="NO_ENTITY_BODY" value="true" scope="axis2" type="BOOLEAN" />

<call blocking="true">
    <endpoint>
         <http method="GET" uri-template="http://my-api/order-status">
    </endpoint>
</call>
<property name="RESPONSE" scope="default" type="STRING" value="true"/>
<log level="full">
    <property name="response-log" value="Received response"/>
    <property expression="$body" name="response-body"/>
    <property expression="json-eval($)" name="json-eval-body"/>
</log>

这只会导致日志行 - 根本没有响应正文!

INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://my-api/order-status, WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: ID:414d51204343494153303131202020209ca4175f28ac422e, Direction: response, response-log = Received response, response-body = <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"></soapenv:Body>, json-eval-body = {}, Payload: {}

我可以在我的 API 应用程序中看到该请求,并且我还可以在其日志中正确地看到 returns 响应正文。此外,使用 Postman 执行相同的请求,我收到以下 JSON 响应,其中包含 200 OK 和 Content-Type appication/json:

{
   "order_status": "NOT_FOUND"
}

在 WSO2 里面我什么都没看到!我希望能够将响应转换为 XML 格式。

有什么问题吗?

在进行 REST 调用之前,有必要从主调用中删除 headers。

将此代码段放在调用调解器之前:

<property name = "FORCE_HTTP_CONTENT_LENGTH" scope = "axis2" type = "STRING" value = "true" />
     <property action = "remove" name = "REST_URL_POSTFIX" scope = "axis2" />
     <property action = "remove" name = "TRANSPORT_HEADERS" scope = "axis2" />

按我的理解应该可以解决

能不能把NO_ENTITY_BODY属性改成下面这样,再试试这个中介

<property name="NO_ENTITY_BODY" action="remove" scope="axis2"/>

针对这个问题简化了这个配置,我错过了在我的代理服务中设置以下 属性:

<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>

意味着 WSO2 忽略了 API 的响应。删除此 属性 解决了以下配置的问题:

<header name="Accept" value="application/json" scope="transport" />
<property action="remove" name="NO_ENTITY_BODY" scope="axis2"/>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<call blocking="true">
    <endpoint key="conf:/endpoints/FX_TRADING_API_ORDERSTATUS.xml"/>
</call>