シンプルなphp SOAPサーバーを作成しようとしています。
問題は、wsdl ファイルで特定のパラメーターの型を設定したにもかかわらず、私の場合は整数を設定し、別のパラメーターの型 (文字列、配列、連想配列) を使用して 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>