2010-03-15 4 views
4

Je suis en train de résoudre un conflit de noms dans un mappage de wsdl2java avec CXF 2.2.6 Les extraits de wsdl pertinents sont:Impossible d'obtenir la personnalisation de liaison JAX-WS pour travailler

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

Comme vous pouvez le voir, l'opération GetBPK prend un GetBPK en entrée et renvoie une GetBPKResponse en tant que sortie. Chaque élément de GetBPK, ainsi que le type GetBPKResponse seraient mappés à un paramètre de méthode en Java. Malheureusement les deux GetBPK, ainsi que GetBPKResponse ont un élément avec le nom "PersonInfo", ce qui entraîne un conflit de noms.

Je suis en train de résoudre ce en utilisant une personnalisation de liaison:

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

et appelez wsdl2java avec le paramètre -b. Unforunately, je reçois toujours le message:

 
WSDLToJava Error: Parameter: personInfo already exists for method getBPK but of type at.enno.egovds.szr.PersonInfoType instead of java.util.List. Use a JAXWS/JAXB binding customization to rename the parameter. 

J'ai essayé plusieurs variantes de la personnalisation de liaison, et Google pendant des heures cherchai, mais je ne peux malheureusement pas trouver une solution à mon problème.

Je suppose que l'attribut childElementName est incorrect, mais je ne trouve pas d'exemple de ce qui doit être défini pour le faire fonctionner.

BTW, une

<jaxws:method name="nweMethoName"/> 

au lieu du <jaxws:parameter.../>, fonctionne comme prévu.

Merci d'avance!

Répondre

0

J'ai fait face au même problème, mais en utilisant -autoNameResolution comme paramètre résolu le problème.

wsdl2java -autoNameResolution 
Questions connexes