Bekomme keine JAX-WS-binding-Anpassung, um zu arbeiten

Ich versuche zu lösen, einen Namen clash in einem wsdl2java-mapping mit CXF 2.2.6 Die zugehörigen wsdl-Ausschnitte sind:

<types>...
<xs:schema...
    <xs:element name="GetBPK">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="PersonInfo" type="szr:PersonInfoType" />
                    <xs:element name="BereichsKennung" type="xs:string" />
                    <xs:element name="VKZ" type="xs:string" />
                    <xs:element name="Target" type="szr:FremdBPKRequestType" minOccurs="0" maxOccurs="unbounded" />
                    <xs:element name="ListMultiplePersons" type="xs:boolean" minOccurs="0" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="GetBPKResponse">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="GetBPKReturn" type="xs:string" minOccurs="0" />
                    <xs:element name="FremdBPK" type="szr:FremdBPKType" minOccurs="0" maxOccurs="unbounded" />
                    <xs:element name="PersonInfo" type="szr:PersonInfoType" minOccurs="0" maxOccurs="5" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
</xs:schema>
</types>

<message name="GetBPKRequest">
    <part name="parameters" element="szr:GetBPK" />
</message>
<message name="GetBPKResponse">
    <part name="parameters" element="szr:GetBPKResponse" />
</message>

<binding...
    <operation name="GetBPK">
        <wsdlsoap:operation soapAction="" />
        <input name="GetBPKRequest">
            <wsdlsoap:header message="szr:Header" part="SecurityHeader" use="literal" />
            <wsdlsoap:body use="literal" />
        </input>
        <output name="GetBPKResponse">
            <wsdlsoap:body use="literal" />
        </output>
        <fault name="SZRException">
            <wsdlsoap:fault use="literal" name="SZRException" />
        </fault>
    </operation>

Wie Sie sehen können, die GetBPK Vorgang dauert ein GetBPK als Eingabe und gibt eine GetBPKResponse als Ausgang. Jedes element sowohl der GetBPK, sowie die GetBPKResponse Typ zugeordnet werden, um einen parameter einer Methode in Java. Leider sind beide GetBPK, sowie die GetBPKResponse ein element mit dem Namen "PersonInfo", die Ergebnisse in einen name-clash.

Ich bin versucht zu lösen, dass durch eine verbindliche Anpassung:

<jaxws:bindings wsdlLocation="SZ2-aktuell.wsdl"
    xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:szr="urn:SZRServices">
    <jaxws:bindings
        node="wsdl:definitions/wsdl:portType[@name='SZR']/wsdl:operation[@name='GetBPK']">
         <!-- See page 116 of the JAX-WS specification version 2.2 from 10, Dec 2009 -->
        <jaxws:parameter
            part="wsdl:definitions/wsdl:message[@name='GetBPKResponse']/wsdl:part[@name='parameters']"
            childElementName="szr:PersonInfoType" name="PersonInfoParam" />

    </jaxws:bindings>
</jaxws:bindings>

- und call-wsdl2java, mit dem -b parameter. Nur leider, ich bekomme immer noch die Meldung:

WSDLToJava Fehler: Parameter: personInfo bereits für die Methode getBPK aber der Typ an.enno.egovds.szr.PersonInfoType anstelle von java.util.Liste. Verwenden Sie eine JAXWS/JAXB binding-Anpassung, um benennen Sie die parameter. 

Ich habe versucht, mehrere Varianten der Bindung, Anpassung und Google gesucht für Stunden, aber leider habe ich nicht finden können, eine Lösung für mein problem.

Ich suspenct, dass die childElementName-Attribut falsch ist, aber ich kann nicht finden, ein Beispiel von dem, was sein müsste, damit es funktioniert.

BTW, ein

<jaxws:method name="nweMethoName"/>

statt der <jaxws:parameter.../>, funktioniert wie erwartet.

Vielen Dank im Voraus!

InformationsquelleAutor Florian | 2010-03-15
Schreibe einen Kommentar