Anonymous Inner ComplexTypes im XSD mit Java2WSDL bzw. WSDL2Java

Beim „Contract First“ Ansatz für WebServices generiert man zuerst die WSDLs und dazugehörigen XML Schema-Dateien, um daraus dann mit WSDL2Java ein Java Bean Skeleton zu erzeugen.

Wenn dann die URL des WebServices mit ?wsdl aufgerufen wird, generiert AXIS aus den Klassen mit Java2WSDL wieder eine WSDL Datei.

Allerdings gibt es da ein Problem mit annonymen inneren ComplexTypes, wenn ein Element maxOccurs=“unbounded“ definiert ist.

Der XSD-Ausschnitt, der den Fehler:

Server.generalException – makeTypeElement() was told to create a type […]

generierte, sah folgendermaßen aus:

<complexType name=“searchItemListType“>
<sequence>
<element maxOccurs=“unbounded“ name=“searchItem“ />
<complexType> <– annonymous inner type
<sequence>
<element ref=“tns:id“/>
<element name=“name“ type=“string“/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>

D.h. also, der Typ für das searchItem-Element hat keine Bezeichnung. Und ich denke hier lag mein Denkfehler.

Wie soll WSDL2Java Klassen (also Typen) erstellen für Arrays ohne einen Namen zu haben.

Deshalb sieht die Lösung folgendermaßen aus:

<complexType name=“searchItemListType“>
<annotation>
<documentation>Type for all searchItems with id and itemtext in the selected language</documentation>
</annotation>
<sequence>
<element maxOccurs=“unbounded“ name=“searchItem“ type=“tns:searchItemType“/>
</sequence>
</complexType>

<complexType name=“searchItemType“>
<sequence>
<element ref=“tns:id“/>
<element name=“name“ type=“string“/>
</sequence>
</complexType>

So funktioniert nun auch Java2WSDL und zeigt die WSDL-Datei problemlos an.

Advertisements



    Kommentar verfassen

    Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

    WordPress.com-Logo

    Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

    Twitter-Bild

    Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

    Facebook-Foto

    Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

    Google+ Foto

    Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

    Verbinde mit %s



%d Bloggern gefällt das: