【问题标题】:Extra text in WSO2 API Manager 3.2.0 POST headerWSO2 API Manager 3.2.0 POST 标头中的额外文本
【发布时间】:2021-05-12 12:58:37
【问题描述】:

我一直在尝试使用 WSO2 API Manager 3.2.0 来为 SOAP Web 服务生成 REST API,并成功地遍历了这些过程。我启用了消息线跟踪以查看日志中的请求响应。我可以看到正在创建格式正确的消息并将其发送到后端服务,但是响应与预期不符。 我注意到在 XML 有效负载之前发送了一些额外的文本(通常是“16e”,如倒数第二行),因此被作为有效负载处理。我怀疑这是我的问题的原因,但我无法追踪它的起源。

TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "POST /services/services.php HTTP/1.1[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Origin: https://api-manager.ug.com:9443[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "SOAPAction: https://testservices.ug.com/services/services.php/GetAccountBalance_2[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "activityID: 119801787388364143641044[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Accept: application/json[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,792] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Referer: https://api-manager.ug.com:9443/[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "testkey: 76d33583-e7f9-42a3-a4ad-d91118f8b043[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Accept-Encoding: gzip, deflate, br[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Accept-Language: en-US,en;q=0.5[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "DNT: 1[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Content-Type: application/soap+xml[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Transfer-Encoding: chunked[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Host: testservices.ug.com[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "Connection: Keep-Alive[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "User-Agent: Synapse-PT-HttpComponents-NIO[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,793] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "16e[\r][\n]"
TID: [-1] [] [2021-05-12 15:23:55,794] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-5 << "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://testservices.ug.com/soap/TransactionServices"><soapenv:Body><web:GetAccountBalance_2><AccountNumber>001221131211</AccountNumber><AuthToken>111111</AuthToken></web:GetAccountBalance_2></soapenv:Body></soapenv:Envelope>[\r][\n]"

当我使用 XML 请求并直接调用后端 SOAP 服务时,我得到了成功的响应。 知道什么可能对这个文本负责,我需要做些什么来摆脱它?您的帮助将不胜感激。

【问题讨论】:

    标签: rest soap header wso2 wso2-am


    【解决方案1】:

    我从https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding#directives得到了16e的源码

    分块

    数据以一系列块的形式发送。在这种情况下,Content-Length 标头被省略,并且在 在每个块的开头,您需要以十六进制格式添加当前块的长度, 接着是 '\r\n',然后是块本身,然后是另一个 '\r\n'。终止块是 常规块,除了它的长度为零。紧随其后的是预告片,其中包括 实体标题字段的(可能为空)序列。

    问题出在内容类型上。我正在发送值“application/soap+xml”并将其更改为“text/xml”,方法是在 /repository/deployment/server/synapse 中找到的 api 的 xml 配置文件中添加以下行-configs/default/api/

    <property name="ContentType" value="text/xml" scope="axis2" type="STRING"/>
    

    这就是让它工作所需的一切。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2015-04-05
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      相关资源
      最近更新 更多