2011-07-14 14 views
5

Genero archivos WSDL para varios servicios web (desde las definiciones del servicio del servidor) donde ya tengo esquemas XML (* .XSD) para los beans utilizados como parámetros. ¿Cómo le digo a java2ws que haga referencia a estos (incluya el XSD externo) y no genere los propios en el WSDL?CXF java2ws: cómo incluir archivos xsd externos?

He intentado -createxsdimports, pero eso genera sus propios archivos XSD.

¿Existe una anotación de Java que pueda usar para que CXF sepa dónde está el XSD para cada archivo/paquete?

Respuesta

4

Pruebe la anotación @XmlSchema. Incluye un parámetro location que se utiliza para contar JAXB que existe un verdadero esquema:

@XmlSchema(location="http://www.example.com/xsds/foo.xsd") 
package com.example.foo; 
+0

Gracias Blaise, ¿cómo puedo definir un archivo xsd en un directorio de proyecto local. Intenté file: /// pero CXF (2.4.1) todavía me da * no * schemaLocation = "" en el PlanBForOpenOffice

2

Tengo un CXF servicio web que importa archivos de esquemas externos. Cuando lo construí; Pasé bastante tiempo tratando de resolver el escenario exacto que estás tratando de lograr. Desafortunadamente, parece que CXF no respeta la anotación @XmlSchema (location = "") al generar WSDL desde Java. Daniel Kulp, el principal desarrollador de CXF, me dijo que en ese momento se trataba de un problema conocido, pero no hay suficientes personas que se quejen de él, por lo que no está en la lista de prioridades para solucionarlo.

Así que terminé escribiendo el WSDL a mano y luego generando el SEI del archivo WSDL. Por supuesto, si escribe a mano el WSDL puede hacer lo que quiera.

Tenga en cuenta que un efecto secundario de esto es que el archivo de esquema externo debe ser accesible mediante un HTTP GET, mientras genera el SEI Y cuando se inicia la aplicación de servicio web, CXF recuperará el archivo de esquema en puesta en marcha. Lo mismo ocurre cuando genera el cliente, por supuesto. Esto crea una dependencia arquitectónica un poco desordenada; pero parece que no hay forma de decirle a CXF que "myschema.xsd" está disponible en http://myurl.com/myschema.xsd pero TAMBIÉN en /src/main/schema/myschema.xsd.

Cuestiones relacionadas