2012-07-26 45 views
1

我在嘗試使用PHP訪問我自己的PHP Soap服務時遇到問題。我爲客戶端和服務器使用Zend_Soap。Zend Soap客戶端返回null,並返回有效的XML最後一個響應

基本上,我從客戶端獲得的結果爲空。但是,如果我查看最後一個響應,它將包含預期的正確的XML。所以客戶端無法將xml轉換爲一個php對象(在我的測試用例中是一個簡單的int)以供使用。

我的WSDL看起來像這樣

<definitions name="SOAP_Model_soaphandler" targetNamespace="http://website.com/appldev/applications/public/SOAP/index/soap"> 
    <types> 
     <xsd:schema targetNamespace="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
    </types> 
    <portType name="SOAP_Model_soaphandlerPort"> 
     <operation name="test"> 
      <documentation>Returns list of all products in database</documentation> 
      <input message="tns:testIn"/> 
      <output message="tns:testOut"/> 
     </operation> 
     <operation name="test2"> 
      <documentation>Adds new product to database</documentation> 
      <input message="tns:test2In"/> 
      <output message="tns:test2Out"/> 
     </operation> 
    </portType> 
    <binding name="SOAP_Model_soaphandlerBinding" type="tns:SOAP_Model_soaphandlerPort"> 
     <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <operation name="test"> 
      <soap:operation soapAction="http://website.com/appldev/applications/public/SOAP/index/soap#test"/> 
      <input> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
      </input> 
      <output> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
      </output> 
     </operation> 
     <operation name="test2"> 
      <soap:operation soapAction="http://website.com/appldev/applications/public/SOAP/index/soap#test2"/> 
      <input> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
      </input> 
      <output> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
      </output> 
     </operation> 
    </binding> 
    <service name="SOAP_Model_soaphandlerService"> 
     <port name="SOAP_Model_soaphandlerPort" binding="tns:SOAP_Model_soaphandlerBinding"> 
      <soap:address location="http://website.com/appldev/applications/public/SOAP/index/soap"/> 
     </port> 
    </service> 
    <message name="testIn"/> 
    <message name="testOut"> 
     <part name="return" type="xsd:int"/> 
    </message> 
    <message name="test2In"> 
     <part name="id" type="xsd:int"/> 
    </message> 
    <message name="test2Out"> 
     <part name="return" type="soap-enc:Array"/> 
    </message> 
</definitions> 

我的回答是這樣的

<env:envelope xmlns:enc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://website.com/appldev/applications/public/SOAP/index/soap" xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 
    <env:body xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"> 
     <ns1:testresponse env:encodingstyle="http://www.w3.org/2003/05/soap-encoding"> 
      <rpc:result>return</rpc:result> 
      <return xsi:type="xsd:int">7</return> 
     </ns1:testresponse> 
    </env:body> 
</env:envelope> 

$result=$client->test(); 
var_dump($result); 

輸出NULL。

任何想法?它看起來應該對我有用,但我不是肥皂客戶端如何工作的專家。也許這個命名空間有什麼問題?我真的不知道。它似乎應該工作正常。作爲參考,我遵循這個指南得到的東西和運行:

http://www.ibm.com/developerworks/webservices/library/x-zsoap/index.html

我想我可以永遠只是手動從XML響應,但我希望能找出爲什麼客戶端沒有做所以對我來說。

回答

2

您應該嘗試刪除soap temp文件:/tmp/wsdl*,然後重新啓動網絡服務器。 希望得到這個幫助。

+0

這個目錄在哪裏? – 2017-06-27 04:11:43

-1

這是有點晚了,但僅僅是爲了記錄驗證在服務類中的方法的聲明,註釋應該是這樣的

/** * 服務 * * @參數類型$ VARNAME * @return type */

必須有/ **和和一個空間,然後剩下的。否則返回null。

祝你好運!

+1

應該是一個評論。 – bmargulies 2013-09-23 00:27:52