2012-06-19 76 views
1

我有一個非常簡單的Web服務,它返回一個字符串(硬編碼)。我在分析SOAP有效負載時不斷收到錯誤:保留的XML名稱。XML錯誤分析SOAP有效負載:保留的XML名稱

我可以查看WSDL沒有問題(interal /後面的防火牆,所以沒有鏈接提供)。

這裏的的NuSOAP客戶端的部分轉儲已經打電話給我的方法後:

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) 

在SOAP身上,你可以看到「SomeText」則會這是從我的Web服務返回的硬編碼的內容,包含只有一個方法:

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

在我的情況下,端口443不受保護,因爲它是內部/測試。

+0

你不能使用PHP Soap擴展嗎? SOAPServer和SOAPClient? http://php.net/manual/en/book.soap.php – Dharmavir

回答

6

刪除<?xmlthen it works之前的空格。如果你不能,也許你可以在解釋之前修改/擴展nusoap類到trim。最有可能的是,額外的空格來自<?php & ?>標籤之外的一些意外空白。

+0

謝謝!只要我清理了白色空間並刷新了一切,這一切都完美無瑕。 – TekiusFanatikus

5

添加在nusoap.php以下行:

$這 - > responseData =修剪($這個 - > responseData);此行之前

返回$這 - > parseResponse($ HTTP-> incoming_headers,修剪($這個 - > responseData));

解決了我同樣的問題

+0

Thanx.your答案解決了我的問題。 – AndyN

+0

這對我有用,謝謝,幹得好。 – Matt

0

在我的代碼它是格式不正確XML,如葡萄牙語BR具有非常特殊字符,引號,沒有正確關閉標籤。在代碼的結尾顯示返回XML,在此網站上進行檢查:http://www.xmlvalidation.com/ 然後他又回到工作。