私は、WebアプリケーションとMicrosoft Exchange 2007との統合に取り組んでいます。Exchange Webサービス(EWS)を使用してExchange Serverと通信しています。しかし、私はWSDLに関するいくつかの問題に取り組んでいます。抽象型の要素を持つWSDLには、いくつかの型が定義されています。例:PHPで抽象型のWSDLを使用する
<xs:complexType name="RestrictionType">
<xs:sequence>
<xs:element ref="t:SearchExpression"/>
</xs:sequence>
</xs:complexType>
SearchExpressionはabtractタイプです。このようExistsTypeとしてSearchExpressionを拡張し、いくつかの種類があります。
<xs:complexType name="ExistsType">
<xs:complexContent>
<xs:extension base="t:SearchExpressionType">
...
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Exists" type="t:ExistsType" substitutionGroup="t:SearchExpression"/>
私は、次のXMLを生成し、有効なコール作ることができると期待する。しかし
<Restriction>
<Exists>
...
</Exists>
</Restriction>
を、私が作るしようとしたときPHPののSoapClientクラスを使用して呼び出し、私は次のエラーが表示されます
The request failed schema validation: The element ' http://schemas.microsoft.com/exchange/services/2006/types:SearchExpression ' is abstract or its type is abstract.
私がフォローにRestrictionTypeタイプの定義を変更する場合、呼び出しは動作します:
<xs:element name="Exists" type="t:ExistsType"/>
PHPのSOAP処理がWSDLの抽象型を適切に処理できないか、またはWSDL自体に問題がある可能性がありますか? WSDLはローカルに格納されているので、必要が生じた場合は編集することができます。
ありがとうございます。
編集:
私はちょうど私がXMLを自分自身を形成しておりませんことを明確にしたかったのです。私は、適切なXMLを作成する必要がある次のコードを使用しています:
$request->Restriction->IsGreaterThan->FieldURI->FieldURI =
'item:DateTimeReceived';
$request->Restriction->IsGreaterThan->FieldURIOrConstant
->Constant->Value = date('c', $last_checked_time);
は、私もそれをチェックアウトし、SoapVarが動作するようになった: '$のvarは=新しいSoapVar($データ、SOAP_ENC_ARRAY、 'RestrictionType'、 'のhttp:// thenamespace/Webサービス/名前空間')' –