2013-04-01 88 views
2

我試圖創建一個簡單的PHP肥皂服務器。Php肥皂函數參數

問題是,儘管我在wsdl文件中設置了特定的參數類型,在我的情況下我設置了整數,我可以使用另一個參數類型(String,Array,Assoc Array)從php進行方法調用。

從理論上講,如果php參數類型與wsdl參數類型不一樣不應該拋出錯誤?在我的情況下,如果我與服務器上的數組調用函數我得到數組,我用服務器上的字符串調用相同的函數我得到字符串等

如何可編輯下面的代碼,我的方法「doMyBookSearch」只接受在wsdl上聲明的整數。

客戶端代碼:

try{ 
    $sClient = new SoapClient('sample.wsdl',array('trace'=>true)); 
    print_r($sClient->doMyBookSearch('test')); //I call the function with a string, and not integer as WSDL 
} catch(SoapFault $e){ 
var_dump($e); 
} 

服務器代碼:

$server = new SoapServer("sample.wsdl"); 

function doMyBookSearch($yourName){ 
    return 'Works'; //return string 
} 

WSDL:

<types> 
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:MyBookSearch"> 
     <xsd:element name="bookTitle"> 
      <xsd:simpleType> 
       <xsd:restriction base="xsd:integer"> 
        <xsd:minInclusive value="0"/> 
        <xsd:maxInclusive value="120"/> 
       </xsd:restriction> 
      </xsd:simpleType> 
     </xsd:element> 
    </xsd:schema> 
</types> 

<message name="doMyBookSearch"> 
    <part name="bookTitle" type="tns:bookTitle" /> 
</message> 

<message name="doMyBookSearchResponse"> 
    <part name="return" type="xsd:string" /> 
</message> 

<portType name="MyBookSearchPort"> 
    <operation name="doMyBookSearch"> 
     <input message="tns:doMyBookSearch" /> 
     <output message="tns:doMyBookSearchResponse" /> 
    </operation> 
</portType> 

回答

1

PHP並不真正關心在這種情況下類型。 根據我對SOAP和PHP的經驗,所有變量都以字符串形式發送/接收,並且不考慮WSDL文件的限制。

一種方法就是在doMyBookSearch()函數中檢查自己,並在需要時拋出錯誤。

+0

因此,您的意思是,如果我會在java中編寫相同的soap服務器,並且從php客戶端調用doMyBookSearch的參數不同於wsdl中指定的參數而不是客戶端應該會出錯?沒有人工干預。 – Catalin

+0

我認爲它應該但我不是100%確定。測試這將是一件好事。 –

+0

使用\ SoarVar函數來尊重類型 – Johnny