在WSO2 API Manager 4.1中将WSDL1.1的SOAP API转REST时遇415错误
WSO2 API Manager将WSDL1.1 SOAP后端转为REST API时415错误解决方法
在WSO2 API Manager中尝试将基于WSDL 1.1版本的旧SOAP后端暴露为REST API时,出现Error: response status is 415错误。
相关Carbon日志
TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "POST /Amplitude-WS/public?wsdl HTTP/1.1[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Origin: https://uib-as522.uib.socgen:9443[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "SOAPAction: [ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Referer: https://uib-as522.uib.socgen:9443/[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Sec-Fetch-Dest: empty[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Sec-Fetch-Site: same-site[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Accept-Encoding: gzip, deflate, br[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "accept: application/json[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Sec-Fetch-Mode: cors[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "activityid: 083f1db3-599f-4c90-942c-31d1ed180b58[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "sec-ch-ua: "Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "sec-ch-ua-mobile: ?0[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "sec-ch-ua-platform: "Windows"[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Content-Type: application/soap+xml[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Transfer-Encoding: chunked[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Host: uib-as150.uib.socgen:9443[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "Connection: Keep-Alive[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "User-Agent: Synapse-PT-HttpComponents-NIO[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "1ce[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://services.omnichannel.ws.uib.tn.com/"><soapenv:Body><web:BranchList><BranchListRequest><MessageHeader><RequestChannel>string</RequestChannel><InitialRequestId>string</InitialRequestId><RequestTime>string</RequestTime><RequestId>string</RequestId></MessageHeader></BranchListRequest></web:BranchList></soapenv:Body></soapenv:Envelope>[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "0[ ][ ]" TID: [-1234] [] [2023-04-05 13:00:35,962] DEBUG {org.apache.synapse.transport.http.wire} - HTTPS-Sender I/O dispatcher-1 << "[ ][ ]"
错误原因分析
从日志能定位三个核心问题:
- Content-Type不匹配:请求使用
application/soap+xml(SOAP 1.2标准内容类型),但后端基于WSDL 1.1,对应SOAP 1.1协议,要求的Content-Type是text/xml。 - SOAPAction头缺失:SOAP 1.1协议要求必须携带有效的SOAPAction头,日志中该字段为空。
- SOAP信封命名空间错误:请求中的SOAP信封使用SOAP 1.2的命名空间
http://www.w3.org/2003/05/soap-envelope,而SOAP 1.1应使用http://schemas.xmlsoap.org/soap/envelope/。
解决步骤
- 修改Content-Type配置:
在WSO2 API Manager的API设计页面或自定义序列中,将发送至后端的请求Content-Type设置为text/xml。 - 配置SOAPAction头:
从WSDL 1.1的wsdl:operation节点下的soap:operation元素中获取soapAction属性值,为REST API对应的每个方法配置该SOAPAction头。 - 修正SOAP信封命名空间:
确保REST转SOAP的转换逻辑生成符合SOAP 1.1规范的信封,使用http://schemas.xmlsoap.org/soap/envelope/作为命名空间。
内容的提问来源于stack exchange,提问作者Oussama Nairi
相关产品推荐
相关产品推荐

