2

シンプルな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>
4

1 に答える 1

1

この場合、PHP は型をあまり気にしません。SOAP と PHP に関する私の経験によると、すべての変数は文字列として送受信され、WSDL ファイルの制限を尊重しません。

これに対処する 1 つの方法は、doMyBookSearch() 関数で自分でチェックを行い、必要に応じてエラーをスローすることです。

于 2013-04-01T13:27:35.863 に答える