Custom Pipeline Error: “Reason: Enumeration has not started. Call Move Next”

Ein XPathNodeIterator-Parameter im «JSON Encoder» in einer benutzerdefinierten Sendepipeline verwendet den Typ XPathArrayIterator. Aufgrund eines BizTalk-Fehlers tritt in der Kodierungsphase ein Fehler bei der Iteration durch die Knoten auf, wenn ein XML-Schema-Set verwendet wurde. Aufgrund der Beziehung zwischen mehreren XML-Schemas, die nicht aufgelöst werden können, wird ein Fehler mit der Meldung ausgegeben: “Enumeration has not started. Call Move Next.” So lässt sich das Problem lösen…

Die Lösung: Dieser Fehler kann leicht behoben werden. Wenn das XML-Schema-Set in ein einziges XML-Schema eingefügt werden kann, tritt der Fehler nicht mehr auf. Es wird funktionieren, wenn das XSD wie folgt aussieht:

<xs:element name=“Element“>
<xs:complexType>
<xs:sequence>
<xs:element name=“Field“ type=“xs:string“ />
</xs:sequence>
</xs:complexType>
</xs:element>

Allerdings wird es einen Fehler ausgeben, wenn das XSD so aussieht:

<xs:importschemaLocation=“.\import.xsd“ />
<xs:element  ref=“imported“ />

<xs:complexType name=“imported“>
<xs:sequence>
<xs:element name=“Field“ type=“xs:string“ />
</xs:sequence>
</xs:complexType>

Das ist tatsächlich ein bekannter Fehler in der BizTalk-Umgebung.

Fazit:

Als Workaround für diesen BizTalk Fehler muss ein XML-Schema-Set vorgängig manuell in ein XML-Schema umgebaut werden. Die JSON-Pipeline-Verarbeitung ist damit sichergestellt.

Der Beitrag stammt von Florian Becher, Developer III, QUIBIQ Schweiz AG