【发布时间】:2014-03-10 10:52:41
【问题描述】:
我们正在努力构建客户可以使用的 Web 服务。当我们在 PHP 中创建客户端程序测试 Web 服务时,它运行良好。但是当客户使用我们的 WSDL 在 Java 中调用服务时,它会得到 500: Internal server error。
注意到,我们在测试时得到的 SOAP 信封与在客户测试时得到的不同。我们的服务器程序日志还显示,在客户测试时 addfunction() 没有被调用。如何解决这个问题。
我们在测试时得到的肥皂信封:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://stage.xyz.com/newcode/"><SOAP-ENV:Body><ns1:updateDelivery><ns1:data>9861164345-98611643451391407829-20140219000000-test one-100003767,9861159602-98611596021391408014-20140219000000-test three-
100003769,9861163442-98611634421391407911-20140219000000-test two-100003768</ns1:data></ns1:updateDelivery></SOAP-ENV:Body></SOAP-ENV:Envelope>
客户测试时收到的肥皂信封:
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><updateDelivery xmlns="http://stage.xyz.com/newcode/"><data>9861164345-98611643451391407829-20140219000000-test one-100003767,9861159602-98611596021391408014-20140219000000-test three-100003769,9861163442-98611634421391407911-20140219000000-test two-100003768</data><hashkey>2604574653</hashkey></updateDelivery></S:Body></S:Envelope>
这些不同的信封会导致内部服务器错误吗?
感谢@Mujahed Syed。我们安装了 SoapUI 并进行了测试。我们注意到,请求包含标头信息以及 SOAP 信封。如果在 SoapUI 中仅将 SOAP 信封作为请求传递,则服务返回结果,否则返回 SoapFault。所以我们收到的请求:
--uuid:6035feb3-d1da-4493-b32b-7146115d0327
Content-Id: <rootpart*6035feb3-d1da-4493-b32b-7146115d0327@example.jaxws.sun.com>
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><updateDelivery xmlns="http://ourwebsiteurl"><data>9861164345-98611643451391407829-20140219000000-test one-100003767,9861159602-98611596021391408014-20140219000000-test three-100003769,9861163442-98611634421391407911-20140219000000-test two-100003768</data><hashkey>2604574653</hashkey></updateDelivery></S:Body></S:Envelope>
--uuid:6035feb3-d1da-4493-b32b-7146115d0327--
这作为请求返回 500 内部错误
<faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
<faultactor xsi:type="xsd:string"/>
<faultstring xsi:type="xsd:string">error in msg parsing:
XML error parsing SOAP payload on line 1: Not well-formed (invalid token)</faultstring>
<detail xsi:type="xsd:string"/>
如果只有 Soap Envelope 作为对 SoapUI 的请求,它会返回
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:updateDeliveryResponse xmlns:ns1="http://ourwebsiteurl">
<return xsi:type="xsd:string">100|2604574653|</return>
</ns1:updateDeliveryResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我们可以在 PHP 中接收 SOAP 信封并进行 SoapServer 调用吗?还是我们在调试问题时完全错了。 请提供您的意见。提前致谢。
【问题讨论】:
标签: java php web-services soap wsdl