2010-05-20 15 views
12

Tengo un archivo xsd Foo.xsd. Intenté seguir formas de referirlo a un archivo WSDL pero no funciona.¿Cómo especificar la ubicación del esquema en un archivo xsd?

1) colocaron el archivo xsd en el sistema de archivos local e importado como

<xsd:import namespace="http://ws.test.com/" schemaLocation="file:///D:/wsdl/Foo.xsd"></xsd:import> 

2) Colocado el archivo xsd en la carpeta raíz de la tela y de importación,

<xsd:import namespace="http://ws.test.com/" schemaLocation="http://localhost:8080/Xfire/Foo.xsd"></xsd:import> 

Cuando ejecuto el cliente Obtengo nulo para los campos de objeto de respuesta. Pero esto funciona cuando incrusto la definición de tipo dentro del WSDL.

¿Cómo especificamos la ruta a las xsds externas?

Estoy usando xFire 1.2.6 para generar servicios web. El cliente se genera utilizando la tarea xFire WSGen y la hormiga.

+0

Tenga cuidado con el tiempo de compilación frente a las rutas de tiempo de ejecución si hace referencia directamente al archivo. Tuve problemas con esto y terminé alojando xsds en un servidor para mis referencias y luego haciendo referencia al uri. –

Respuesta

16

Se accede al WSDL por HTTP desde cualquier host, por lo que el cliente no puede acceder a un archivo URL ni al localhost (que será su propio host, no su servidor). La mejor solución será una ruta de archivo en el archivo xsd:

ruta relativa:

<xsd:import namespace="http://ws.test.com/" schemaLocation="../Foo.xsd"/> 

Ruta absoluta:

<xsd:import namespace="http://ws.test.com/" schemaLocation="/myapp/Foo.xsd"/> 

Por la ruta absoluta que necesita saber la ruta de contexto de su webapp, entonces preferiría la ruta relativa.

+1

intenté la ruta relativa usando schemaLocation = "/ xfire/Foo.xsd" org.codehaus.xfire.XFireRuntimeException: No se pudo encontrar la parte de esquema: xFire 1.2.6 utilizado para generar servicios web. – Manoj

+0

Una ruta relativa no comienza con un /. ¿Es/xfire la ruta de contexto de su aplicación web? –

+0

mi proyecto es maven Proyecto de varios módulos que di ../foo.xsd. Si construyo ese módulo solo, puedo encontrar XSD y construir éxito. si construyo desde el padre que está buscando el XSD en la ubicación raíz de los padres, la construcción se está fallando. cualquier idea sobre cómo dar la ubicación xsd si el proyecto es multi módulo –

Cuestiones relacionadas