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>
因此,您的意思是,如果我會在java中編寫相同的soap服務器,並且從php客戶端調用doMyBookSearch的參數不同於wsdl中指定的參數而不是客戶端應該會出錯?沒有人工干預。 – Catalin
我認爲它應該但我不是100%確定。測試這將是一件好事。 –
使用\ SoarVar函數來尊重類型 – Johnny