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>
我正在使用 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>