XML error parsing SOAP payload: Reserved XML Name

16,309

Solution 1

Remove the whitespace before <?xml and then it works. If you can't, maybe you can alter/extend the nusoap class to trim the response before interpretation. Most likely the extra whitespace comes from some accidental whitespace outside the <?php & ?> tags.

Solution 2

Adding the following line in nusoap.php :

$this->responseData = trim($this->responseData);

before this line :

return $this->parseResponse($http->incoming_headers, trim($this->responseData));

solved my same problem

Solution 3

In my code it was poorly formatted XML, as in the Portuguese language BR has very special characters, quotes, did not close the tag correctly. At the end of the code shows the return, an XML, made a check at this site: http://www.xmlvalidation.com/ then he went back to work.

Share:
16,309
TechFanDan
Author by

TechFanDan

Eats, breathes anything tech related. #SOreadytohelp

Updated on July 20, 2022

Comments

  • TechFanDan
    TechFanDan almost 2 years

    I have a very simple web service that returns a string (hardcoded at that). I keep getting an error while parsing SOAP payload : Reserved XML Name.

    I can view the WSDL no problem (interal/behind firewall, so no link to provide).

    Here's a partial dump of the NuSOAP client after having called my method:

    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)
    

    In the SOAP body, you can see "SomeText" which is the hard coded content that is returned from my web service that contains only one method:

    $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;
    }
    

    In my case, port 443 isn't protected as it's internal/testing.

  • TechFanDan
    TechFanDan almost 12 years
    Thanks! As soon as I cleaned the whitepace and refreshed, it all worked flawlessly.