2011-01-18 9 views
5

Tengo un archivo WSDL que importa varios esquemas XML, cada uno de ellos con el mismo espacio de nombres (llamémoslo A). Estoy tratando de usar un archivo de enlace externo JAXB para cambiar el nombre del paquete generado (por ejemplo, B) para esos esquemas. Aquí hay un ejemplo:CXF: ¿Cómo cambiar el paquete del esquema XML importado WSDL utilizando el archivo de enlace externo JAXB?

Tengo un archivo POM que contiene la configuración para la generación de código a partir de WSDL (usando el complemento cxf-codegen-plugin).

Mi WSDL:

<definitions ...> 
    <types> 
     <xsd:schema elementFormDefault="qualified" targetNamespace="C"> 
      <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/> 
      <xsd:import namespace="A" schemaLocation="SCHEMA_REF"/> 
      ... 
     </xsd:schema> 
    </types> 
    ... 
</definitions> 

Aquí está mi archivo de enlace real que no funciona en absoluto, parece que no se aplica en absoluto (no mensaje de error ...).

<jaxws:bindings wsdlLocation="WSDL_LOCATION" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" jaxb:version="2.0"> 
    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='C']/xs:import[@namespace='A']">. 
     <jaxb:schemaBindings> 
      <jaxb:package name="B" /> 
     </jaxb:schemaBindings> 
    </jaxws:bindings> 
</jaxws:bindings> 

Como no tengo ningún mensaje de error en la generación tal vez es debido a que la expresión XPath se utiliza para el acceso al esquema importado no es bueno ...

¿Ustedes tienen alguna idea? Estoy algo atrapado aquí ...

¡Gracias de antemano por sus entradas!

Respuesta

0

Curiosamente, no tienes respuestas :) Lamentablemente, no es posible archivar lo que deseas. La única forma es definir archivos de enlace separados para cada archivo de esquema que tenga, que funcionarán bien.

+0

Gracias por su respuesta, no estoy trabajando en este tema en este momento, así que no puedo probar esta solución. ¡Lo haré tan pronto como pueda! – reef

+0

Una adición: tendrá que usar el espacio de nombres "jaxb" puro para los archivos XSD, "jaxws" no funcionará con ellos. – Stas

1

intentar escribir sus fijaciones como-si-el esquema de importación se fusionaron en el documento WSDL, haciendo referencia a su espacio de nombres directamente:

<jaxws:bindings wsdlLocation="WSDL_LOCATION" 
     xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
     jaxb:version="2.0"> 
    <jaxws:bindings 
     node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='A']">. 
    <jaxb:schemaBindings> 
     <jaxb:package name="B" /> 
    </jaxb:schemaBindings> 
</jaxws:bindings> 

Esto funcionó para mí. Felicitaciones a this post que demuestra que se trabaja con un esquema importado.

Cuestiones relacionadas