Verwenden einer WSDL mit abstrakten Typen in PHP

Ich arbeite an einer Integration zwischen unserer Webanwendung und Microsoft Exchange 2007. Ich verwende Exchange Web Services (EWS), um mit dem Exchange Server zu kommunizieren. Ich habe jedoch einige Probleme mit der WSDL. In der WSDL sind mehrere Typen definiert, die Elemente abstrakter Typen enthalten. Zum Beispiel:

<xs:complexType name="RestrictionType">
  <xs:sequence>
    <xs:element ref="t:SearchExpression"/>
  </xs:sequence>
</xs:complexType>

SearchExpression ist ein abtrakter Typ. Es gibt verschiedene Typen, die SearchExpression erweitern, z. B. ExistsType:

<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"/>

Ich würde erwarten, in der Lage zu sein, einen gültigen Aufruf zu tätigen, der das folgende XML erzeugt:

<Restriction>
  <Exists>
    ...
  </Exists>
</Restriction>

Wenn ich jedoch versuche, den Aufruf mit der SoapClient-Klasse von PHP durchzuführen, wird die folgende Fehlermeldung angezeigt:

Die Anforderung ist bei der Schemaüberprüfung fehlgeschlagen: Das Element 'http://schemas.microsoft.com/exchange/services/2006/types:SearchExpression'ist abstrakt oder sein Typ ist abstrakt.

Wenn ich die Definition des RestrictionType-Typs wie folgt ändere, funktioniert der Aufruf:

<xs:element name="Exists" type="t:ExistsType"/>

Kann das SOAP-Handling von PHP abstrakte Typen in der WSDL nicht richtig verarbeiten, oder stimmt etwas mit der WSDL selbst nicht? Die WSDL wird lokal gespeichert, sodass ich sie bei Bedarf bearbeiten kann.

Danke im Voraus für Ihre Hilfe.

Bearbeiten:
Ich wollte nur klarstellen, dass ich das XML nicht selbst erstelle. Ich verwende den folgenden Code, der das richtige XML erstellen soll:

$request->Restriction->IsGreaterThan->FieldURI->FieldURI =
  'item:DateTimeReceived';
$request->Restriction->IsGreaterThan->FieldURIOrConstant
  ->Constant->Value = date('c', $last_checked_time);

Antworten auf die Frage(3)

Ihre Antwort auf die Frage