2011-05-09 56 views
10

Estoy creando un primer servicio web WSDL con JAXB y CXF. No poseo el WSDL, así que no puedo hacer cambios en él. Estoy usando ftp://ftp.ihe.net/TF_Implementation_Material/ITI/wsdl/PIXManager.wsdl como mi WSDL. Usé CXF 2.3.0 para generar clases de Java.JAXB, CXF: No hay ObjectFactory con @XmlElementDecl para el elemento ... con

generación de la clase de Java fue bien, pero cuando estoy tratando de ejecutar esto en una aplicación web, me sale un error

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 17 counts of IllegalAnnotationExceptions 

Los 17 cargos son del formato

There's no ObjectFactory with an @XmlElementDecl for the element {urn:hl7-org:v3}assignedDevice. 
     this problem is related to the following location: 
      at protected javax.xml.bind.JAXBElement org.hl7.v3.QUQIMT021001UV01AuthorOrPerformer.assignedDevice 

Cuando voy a la clase mencionada, es decir QUQIMT021001UV01AuthorOrPerformer y observe el assignedDevice campo, veo esto

@XmlElementRef(name = "assignedDevice", namespace = "urn:hl7-org:v3", type = JAXBElement.class) 
protected JAXBElement<COCTMT090300UV01AssignedDevice> assignedDevice; 

Cuando miro el ObjectFactory del paquete, veo esto

private final static QName _COCTMT090303UV01AssignedDeviceAssignedDevice_QNAME = new QName("urn:hl7-org:v3", "assignedDevice"); 

Todos mis 17 errores son similares. ¿Qué puedo hacer durante mi codegen o runtime para que mi servicio funcione?

+1

que estaba usando múltiples WSDL en mi codegen, y que estaba causando un conflicto en estas definiciones. Lo reduje a un WSDL y funciona bien. Sin embargo, me gustaría ver cómo usar múltiples WSLD usados ​​en codegen. – rahul

Respuesta

3

¿Qué versión de Java está utilizando en tiempo de ejecución? Tenía un problema similar con esquema OTA cuando se ejecuta con Java 6. I eliminado el problema al hacer los siguientes cambios en la configuración Maven:.

  1. Uso JAXB impl 2,1 * (en lugar de 2,2) con provided alcance, a coincide con la versión JAXB incluida en Java 6.
  2. Utilice JAX-WS 2.1 (en lugar de 2.2) para que coincida con Java 6 y JAXB 2.1.x.
  3. añadir la opción frontEnd para el plug-in de Maven cxf-codegen-plugin y la pusieron a jaxws21 (o si se utiliza wsdl2java en la línea de comandos, utilice la opción de "-fe jaxws21").
+0

Gracias por sus ideas. Intenté estas cosas, y finalmente decidí eliminar Java/CXF para manejar estos servicios. Decidí crear un controlador de Spring basado en Groovy que utilizara GroovyGoodness ™ Xml Processing. – rahul

1

Cuando genera las clases, también genera un archivo llamado jaxb.properties. Asegúrese de que la aplicación pueda acceder a este archivo en tiempo de ejecución. Tuve el mismo problema y se debió a un paquete de maven: maven no incluirá en los archivos de recursos del paquete (como jaxb.properties) que están debajo del árbol src/main/java a menos que se indique específicamente que lo haga. Hice esto usando org.codehaus.mojo: build-helper-maven-plugin con el objetivo add-resource. Espero que esto ayude

0

Me enfrenté a este error similar y el motivo fue tener conflictos entre las clases Java de stub generadas por los servicios web.

Si las respuestas anteriores no funcionan, intente buscar conflictos.

agregue un resguardo a la vez y agregue incrementalmente.

creo que sirve

Cuestiones relacionadas