Php 解析SOAP负载时发生XML错误:保留XML名称
我有一个非常简单的web服务,它返回一个字符串(硬编码)。在解析SOAP负载时,我一直遇到一个错误:保留XML名称 我可以毫无问题地查看WSDL(内部/防火墙后,因此没有提供链接) 以下是调用我的方法后NuSOAP客户端的部分转储:Php 解析SOAP负载时发生XML错误:保留XML名称,php,web-services,soap,Php,Web Services,Soap,我有一个非常简单的web服务,它返回一个字符串(硬编码)。在解析SOAP负载时,我一直遇到一个错误:保留XML名称 我可以毫无问题地查看WSDL(内部/防火墙后,因此没有提供链接) 以下是调用我的方法后NuSOAP客户端的部分转储: public 'request' => string 'POST myinternalhost.ca/ws.php HTTP/1.0 Host: myinternalhost.ca:443 User-Agent: NuSOAP/0.7.3 (1.114) Co
public 'request' => string 'POST myinternalhost.ca/ws.php HTTP/1.0
Host: myinternalhost.ca:443
User-Agent: NuSOAP/0.7.3 (1.114)
Content-Type: text/xml; charset=ISO-8859-1
SOAPAction: ""
Content-Length: 510
<?xml version="1.0" encoding="ISO-8859-1"?><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="htt'... (length=716)
public 'response' => string 'HTTP/1.1 200 OK
Date: Tue, 19 Jun 2012 18:43:10 GMT
Server: Apache/2.0.59 (Win32) DAV/2 mod_ssl/2.0.59 OpenSSL/0.9.8e mod_auth_sspi/1.0.4 PHP/5.2.3
X-Powered-By: PHP/5.2.3
X-SOAP-Server: NuSOAP/0.7.3 (1.114)
Content-Length: 470
Connection: close
Content-Type: text/xml; charset=ISO-8859-1
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope 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-i'... (length=769)
public 'responseData' => string ' <?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope 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:vms_ws_list_filesResponse xmlns:ns1="http://tempuri.org"><return xsi:type="xsd:string">SomeText</return></ns1:vms_ws_list_filesResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>' (length=470)
public 'error_str' => string 'XML error parsing SOAP payload on line 1: Reserved XML Name' (length=59)
在我的情况下,端口443没有受到保护,因为它是内部/测试端口。在nusoap.php中添加以下行之前,请删除空白: $this->responseData=trim($this->responseData) 在这一行之前: 返回$this->parseResponse($http->传入的_头,trim($this->responseData))
解决了同样的问题在我的代码中,XML格式很差,因为在葡萄牙语中BR有非常特殊的字符、引号,没有正确地关闭标记。代码末尾显示了返回,一个XML,在该站点进行了检查:
然后他又回去工作了。你不能使用PHP Soap扩展吗?SOAPServer和SOAPClient?谢谢我一清洁白空间并刷新它,它就工作得完美无缺。
$server->register('vms_ws_list_files',
array('password' => 'xsd:string'), // Password check
array('return' => 'xsd:string'), // Output parameters
$ns, // namespace
$ns . '#vms_ws_list_files', // soapaction
'rpc', // style
'encoded', // use
'Get list of files on disk' // documentation
);
...
function vms_ws_list_files($password){
global $site;
// Check password
if ($password != 'myHardCodedPwdForTesting') {
return new soap_fault('Wrong password!', '', '');
}
$out = "SomeText";
return $out;
}