webservice simple how from examples example create consumir consume java netbeans jaxb netbeans-7 jaxb2

java - simple - Netbeans con JAXB Random ClassCastException... no se puede convertir a com.sun.xml.bind.v2.runtime.reflect.Accessor



web service java netbeans examples (7)

Eliminé la dependencia de un jar jaxb-impl separado de build.sbt. Eso funciona ahora.

He descargado los mensajes de Soap de un servicio SOAP y trato de burlarme del servicio de Soap devolviendo los mensajes descargados. el siguiente código muestra cómo estoy Desmallando el mensaje de Jabón en la Respuesta requerida

public static DataClientType unmarshallFile(String fileName) throws Exception { XMLInputFactory xif = XMLInputFactory.newFactory(); XMLStreamReader xsr = xif.createXMLStreamReader(ClientSampleSoapResponseData.class.getResourceAsStream(fileName)); xsr.nextTag(); // Advance to Envelope tag xsr.nextTag(); // Advance to Header xsr.nextTag(); // Advance to Body tag xsr.nextTag(); // Advance to getClientByAccountResponse xsr.nextTag(); // Advance to content of getClientByAccountResponse JAXBContext jc = JAXBContext.newInstance(GetClientByAccountResponse.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); JAXBElement<GetClientByAccountResponse> je = unmarshaller.unmarshal(xsr, GetClientByAccountResponse.class); return je.getValue().getClientDataContract(); }

Sin embargo, sigo recibiendo esta ClassCastExeption que sucede al azar. Después de una serie de iteraciones de prueba, comienza a suceder. A veces, una limpieza y compilación lo corrige pero a veces no funciona.

java.lang.ClassCastException: com.x.X.X.X.GetClientByAccountResponse$JaxbAccessorF_clientDataContract cannot be cast to com.sun.xml.bind.v2.runtime.reflect.Accessor at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:188) at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:180) at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:256) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:90)

He intentado otras sugerencias en línea, como volver a las versiones antiguas de jaxb y usar carpetas aprobadas en la configuración del compilador de Maven, pero todavía sucede.

¿Alguna idea sobre qué podría estar causando y posibles soluciones?

Gracias


Encontré el mismo error cuando intenté actualizar JAXB a una versión más nueva que la que venía con el JDK. Java encontró dos o más instancias de JAXB en tiempo de ejecución y no pudo decidir qué versión utilizar.

En mi caso, el problema era que mi aplicación utilizaba servicios web, y tampoco había externalizado JAX-WS. La aplicación comenzó usando clases com.sun.xml.bind.v2.runtime, pero cuando comenzó a trabajar con un archivo WSDL, el JAX-WS interno intentó invocar com.sun.xml. Clases internas de .bind.v2.runtime. El error desapareció cuando descargué e instalé JAX-WS y pude continuar con la actualización.


La inclusión de jaxbiimpl jar durante el tiempo de ejecución a través de su administrador de dependencias en pom principal resolverá este problema. Esta solución es específica para proyectos de maven.


La solución aceptada funcionó para mí cuando estaba en Intellij, pero obtuve el mismo error al ejecutar maven desde la línea de comandos. Al agregar esto a la configuración de maven-surefire-plugin resolvió el problema:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <systemPropertyVariables> <com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize>true</com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize> </systemPropertyVariables> </configuration> </plugin>


Me encontré con el mismo problema en una de mis aplicaciones. En mi caso, el proyecto estaba usando una biblioteca compilada con compatibilidad con Java 1.5, mientras que el proyecto principal tenía compatibilidad con la versión 1.6. Cuando cambié ambos para usar 1.6, el problema desapareció. Espero que esto pueda ayudar a alguien ya que el problema puede ser bastante frustrante y difícil de seguir.


Resuelto con el siguiente código

@BeforeClass public static void init(){ System.setProperty( "com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true"); } @AfterClass public static void revert(){ System.getProperties().remove("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize"); }

El parámetro también se puede configurar en JVM usando

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true


Tuve un problema similar, pero no tuve / no tuve un problema de dependencia (-versión-desajuste).

En mi caso, a una clase le faltaba un @XmlAccessorType , agregar esta anotación solucionó mi problema. Adaptada a su caso, la solución sería:

import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @XmlAccessorType(XmlAccessType.FIELD) // check, if @XmlAccessorType is missing public class GetClientByAccountResponse { ..