1

PHP SoapServer を使用して、wsdl で XSD 要素を動作させることができないようです。私が読んだすべてによると、他のいくつかの企業が「緩い型付き」wsdlsをどのように実装しているかを見ています。レコード情報を取得および送信するには、以下で十分です。

<complexType name="Record">
    <sequence>
        <any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </sequence>
</complexType>

残念ながら、php SoapServer クラスは、厳密に定義されていない要素を破棄しているようです。私が取得するのは、作成リクエストで空のレコードであり、検索/フィルターリクエストで空のレコードを送信しますが、フィールドは SoapServer 処理の前に明らかにそこにあります。

このように欠落しているフィールドを具体的に定義すると...

<complexType name="Record">
    <sequence>
        <element name="FirstName" type="xsd:string" minOccurs="0"/>
        <element name="LastName" type="xsd:string" minOccurs="0"/>
        <any namespace="##targetNamespace" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
    </sequence>
</complexType>

その後、すべてがうまくいき、それらのフィールドがクライアントとの間で受け渡されます。何か不足していますか?すべての名前空間オプション ##any、##local などと processContents オプションを試しました。スキーマに詳細が記載されているかどうかに関係なく、レコードの追加フィールドを送信/返すことができるようにしたいだけです。

4

1 に答える 1

0

SOAP 応答に渡す戻りオブジェクトで SoapVar オブジェクトを使用する必要があります。あなたの場合、返されるオブジェクトは次のようになります。

$recordObject = new stdClass;
$recordObject->prop1 = 'prop1';
$recordObject->prop2 = 'prop2';

$soapReturnObject = new SoapVar($recordObject, SOAP_ENC_OBJECT);

参照: SOAP: PHP で xsd:any 要素の配列を返す

于 2014-04-11T13:30:33.787 に答える