2011-11-29 20 views
9

tengo el siguiente tipo de datos definido en un WSDL:cambio del paquete de la clase generada jaxb

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions name="myService" targetNamespace="http://example.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"> 
    <wsdl:types> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="example.com" targetNamespace="example.com" version="1.0"> 
      <xs:simpleType name="MyEnum"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="one"/> 
        <xs:enumeration value="two"/> 
       </xs:restriction> 
      </xs:simpleType> 
      <!-- SNIP other data types --> 
     </xs:schema> 
    </wsdl:types> 
</wsdl:definitions> 

Quiero MyEnum caer en su propio paquete. Por lo tanto, he utilizado un archivo de enlace jaxws, y se utiliza XPath para atravesar los enlaces de esquema y JAXB para establecer el paquete, de la siguiente manera:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxws:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='example.com']"> 
     <jxb:schemaBindings> 
      <jxb:package name="abra.ca.dabra" /> <!-- this works, and changes package of all classes in the namespace--> 
     </jxb:schemaBindings> 
     <jxb:bindings node="//xs:simpleType[@name='MyEnum']"> 
      <jxb:package name="a.b.c"/> <!-- this does not work --> 
     </jxb:bindings> 
    </jaxws:bindings> 
    <!-- SNIP - other functional jaxws bindings --> 
</jaxws:bindings> 

Ahora, el camino trazado en schemabindings toma - y pone todos los tipos de datos a partir de ese schema/targetnamespace en el paquete abra.ca.dabra. Sin embargo, parece que no puedo configurar el paquete de solo MyEnum, que es lo que quiero.

Utilizo wsdl2java de cxf para proporcionar el archivo de enlaces. ¿Me estoy perdiendo de algo?

+0

me encontré misma problema. ¿Has resuelto el tuyo? – Rudy

+0

El archivo de enlace no es correcto: el prefijo de espacio de nombres 'jaxws' no está vinculado a ningún espacio de nombres. – whaefelinger

+0

Similar, el prefijo 'xs' no está enlazado. – whaefelinger

Respuesta

0

¿Ha intentado agregar un segundo esquema al WSDL que solo contiene MyEnum, con un espacio de nombres diferente? La definición del esquema original debería importar ese tipo desde el nuevo espacio de nombres.

2

me gustaría probar con algo DeEstaManera:

<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 

<jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 

<!-- set default package structure --> 
<jaxws:package name="abra.ca.dabra" /> 

<!-- set package structure for complex schema types --> 
<jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema/xs:simpleType[@name='MyEnum']"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="a.b.c" /> 
    </jaxb:schemaBindings> 
</jaxws:bindings> 

Para ser más precisos que debe hacer todo el WSDL disponibles

Espero que esto ayude ...

Cuestiones relacionadas