0

SoapClientリモート操作を呼び出すために PHP SOAP 拡張 ( ) を使用しています。その WSDL タイプは次のようになります。

<s:element name="OperationResponse">
    <s:complexType>
        <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="OperationResult">
                <s:complexType mixed="true">
                    <s:sequence>
                        <s:any/>
                    </s:sequence>
                </s:complexType>
            </s:element>
        </s:sequence>
    </s:complexType>
</s:element>

私が理解できる限り、タイプは「何でも」です。呼び出しの結果はネストされたオブジェクトに変換され、stdClass操作が簡単ではありません。

object(stdClass)[3]
  public 'OperationResult' => 
    object(stdClass)[4]
      public 'any' => string 'xml string here...'

(これは実際には SOAP 拡張自体によって実行されます)

このオブジェクトの作成方法を制御するにはどうすればよいですか? classmapオプションを SOAP クライアントに渡そうとしましたが、機能しません。インスタンスを取得しましたが、プロパティはnull.

結果を手動で解析する問題は明らかです。SimpleXmlElementからの文字列を使用して新しい を作成できますが$result->OperationResult->any、WSDL が変更されると機能しません。

4

1 に答える 1

0

そのクラスマップ機能を使用して、PHP のほとんどすべての結果に変換できますが、問題は変換するかどうかです。通常、同じ Soap データ構造が要求と応答の両方に使用されるためです。それらを再利用してください!

私の一般的なアプローチは、classmap 機能を使用して、これらすべての ComplexType 構造を PHP クラスにマップすることです。そして、その構造が意図した用途にうまく適合しない場合、PHP で結果を変換するマッパー ステップがあります。

于 2013-08-04T22:04:55.260 に答える