Excepción de WsdlToJava al importar un WSDL
Buen día a todos.
De antemano gracias por la ayuda.
Mi problemática es la siguiente: me proveen un servicio web que me devuelve un DataSet, dicho servicio está desarrollado en Visual Basic.
Intento crear mi cliente en Java con Eclipse Juno y apache CXF 2.4.9 usando el wizard, al dar clic en finalizar, en la consola me aparece la siguiente excepción:
org.apache.cxf.tools.common.ToolException: Thrown by JAXB:
Thrown by JAXB:
undefined element declaration 's:schema'
at line 109 column 19 of schema
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBBindErrorListener.throwError(JAXBBindErrorListener.java:40)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:413)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:591)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:243)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:138)
at org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:286)
at org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
at org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
at org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
Caused by: org.xml.sax.SAXParseExceptionpublicId: systemId: lineNumber: 109; columnNumber: 19; undefined element declaration 's:schema'
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBBindErrorListener.error(JAXBBindErrorListener.java:61)
at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.error(SchemaCompilerImpl.java:316)
at com.sun.tools.xjc.util.ErrorReceiverFilter.error(ErrorReceiverFilter.java:82)
at com.sun.xml.xsom.impl.parser.ParserContext$2.error(ParserContext.java:206)
at com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:184)
at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175)
at com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110)
at com.sun.xml.xsom.impl.parser.DelayedRef.run(DelayedRef.java:85)
at com.sun.xml.xsom.impl.parser.ParserContext.getResult(ParserContext.java:135)
at com.sun.xml.xsom.parser.XSOMParser.getResult(XSOMParser.java:211)
at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:522)
at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:268)
at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:94)
at org.apache.cxf.tools.wsdlto.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:391)
... 8 more
Ayer leí un poco sobre esto y encontré que se debe modificar el WSDL, cambiando el s:schema por un s:any, pero dada la situación actual, no creo que el proveedor quiera hacer dicha modificación. ¿De qué otra forma podría atacar a este problema?
Saludos...
- Inicie sesión o regístrese para enviar comentarios
dataset PFFFF
Si tienes oportunidad de hablar con quien hizo el web service, pídeles que NO devuelvan un DataSet, ya que esa no es una estructura estándar y al hacer eso rompen con la compatibilidad y toda la idea de la interoperabilidad de los web services.
O si les tienes más confianza, diles que no sean huevones y hagan una clase contenedora de los datos que necesitan devolver.
Esto que te digo no tiene nada que ver con tu problema actual, pero cuando lo resuelvas y puedas crear tu cliente de web service te darás cuenta que simplemente recibes un dato tipo string, el cual contendrá un montón de XML que es el dichoso dataset que te están devolviendo. Una estructura que sólo tiene sentido en .NET; en Java vas a tener que parsear ese XML a mano y entonces para qué carajos te sirvió usar un montón de bibliotecas para "facilitar" la invocación del servicio.
En cuanto a tu problema actual: Intenta crear tu cliente de WS con Axis2, busca en las opciones de CXF si hay manera de ignorar el esquema. Como último recurso, puedes descargar el WSDL para guardarlo en un archivo y modificar tu copia local, para crear tu cliente con ese archivo. Y cuando ya quieras usar el cliente pues le indicas el endpoint (que de todas maneras siempre terminas haciendo, para cambiar el URL de pruebas a producción).
EDIT: Olvidé mencionar: putos web services malhechos en .NET. Los odio.
Creo que te falta un campo
Hola. Segun yo :
undefined element declaration 's:schema'
Te falta agregar al menos un campo en tu cliente Web Service, si te es Posible pide la definición de campos del Web Service que consumes. O al menos que te den acceso al codigo para darle una mirada.
Saludos.
Lo revisaré.
Gracias por sus respuestas.
Sin duda concuerdo en que los Web Services de .Net son una basura, es la peor parte con la que me ha tocado lidiar.
Respecto a la confianza con mi proveedor te comento que es casi nula, trabajar con estas personas ha sido un verdadero dolor de cabeza, no quieren modificar en lo más mínimo su sistema y cuando les hacemos alguna observación o sugerencia, prácticamente la descartan al momento. Y creo que mucho menos me darían la oportunidad de mirar su código jeje.
De cualquier forma les comentaremos la situación de interoperabilidad, esperando que acepten, sino como dices ezamudio, tendré que parsear a mano el jodido xml del dataset.
Si logro resolverlo andaré por aquí posteando mis resultados y comentarios.
Saludos y gracias nuevamente a los dos...
Resuelto
Buen día a todos.
Después de realizar algunas pruebas les comentó mis resultados.
Como me sugirió ezamudio, dejé de usar CXF y opté por usar Axis. De esta forma mi cliente se generá sin problemas, pero también como él menciona, solo obtengo un String donde se encuentra el XML que representa a la Base de Datos y sus tablas, por lo tanto el parseo para obtener los valores que requiero tendré que hacerlo a mano.
Gracias nuevamente, saludos...
Bienvenido
Bienvenido al mundo de los web services hechos en .NET por simios ineptos que se hacen pasar por programadores.
Cada que recibo un WSDL donde veo que me van a mandar "un dataset" me dan ganas de ir a su oficina y cagarme en su teclado.
Sin mejor definición
Mejor no pudo haber sido expresado...
Nunca había tenido la desdicha de trabajar con un web service que me devolviera un DataSet, pero con esta experiencia he comenzado a odiarlos.
Lo peor, aparte de su ineptitud, es que se creen todo poderosos, pero bueno, que se puede esperar de una "pseudo-programadora" que ahora estudia leyes jaja.
Saludos y gracias por la ayuda...