unmarshal parse jaxbunmarshaller bean java xml jaxb

parse - object to xml java spring



JAXB no se deshace después de actualizar java de 1.8.0_77 a 1.8.0_121 (1)

Ayer actualicé java como publicado en el título, ahora JAXB ya no analiza el xml. Todos los objetos son simplemente nulos, nada parece estar establecido.

Dado este POJO - ListMatchingProductsResponse

@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ListMatchingProductsResponse", propOrder = { "listMatchingProductsResult", "responseMetadata" }) @XmlRootElement(name = "ListMatchingProductsResponse") public class ListMatchingProductsResponse { @XmlElement(name = "ListMatchingProductsResult") private ListMatchingProductsResult listMatchingProductsResult; @XmlElement(name = "ResponseMetadata") private ResponseMetadata responseMetadata; @XmlAttribute(name = "xmlns") private String xmlns; public String getXmlns() { return xmlns; } public void setXmlns(String xmlns) { this.xmlns = xmlns; } /** * Get the value of ListMatchingProductsResult. * * @return The value of ListMatchingProductsResult. */ public ListMatchingProductsResult getListMatchingProductsResult() { return listMatchingProductsResult; } /** * Set the value of ListMatchingProductsResult. * * @param listMatchingProductsResult The new value to set. */ public void setListMatchingProductsResult(ListMatchingProductsResult listMatchingProductsResult) { this.listMatchingProductsResult = listMatchingProductsResult; } /** * Get the value of ResponseMetadata. * * @return The value of ResponseMetadata. */ public ResponseMetadata getResponseMetadata() { return responseMetadata; } /** * Set the value of ResponseMetadata. * * @param responseMetadata The new value to set. */ public void setResponseMetadata(ResponseMetadata responseMetadata) { this.responseMetadata = responseMetadata; } }

Y el ListMatchingProductsResult

@XmlAccessorType(XmlAccessType.FIELD) @XmlType(name="ListMatchingProductsResult", propOrder={ "products" }) @XmlRootElement(name = "ListMatchingProductsResult") public class ListMatchingProductsResult { @XmlElement(name="Products") private ProductList products; /** * Get the value of Products. * * @return The value of Products. */ public ProductList getProducts() { return products; } /** * Set the value of Products. * * @param products * The new value to set. */ public void setProducts(ProductList products) { this.products = products; } /** * Check to see if Products is set. * * @return true if Products is set. */ public boolean isSetProducts() { return products != null; } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("products", products) .toString(); } }

Yo uso esto para desmaterializar:

String s = getResult(); // s is the expected xml string ListMatchingProductsResponse m = JAXB.unmarshal(new StringReader(s), ListMatchingProductsResponse.class); log.info(m); // ListMatchingProductsResponse@7164e54 log.info(m.getListMatchingProductsResult()); // null

Estoy un poco perdido ya que no veo ningún tipo de razón para esto, ni encontré cambios con respecto a JAXB en el registro de cambios.

¿Qué estoy haciendo mal aquí?

Las siguientes respuestas no resolvieron mi problema hasta el momento

La configuración de JAXB se rompió mediante la actualización de JDK 1.7 a JDK 1.8 u05 para colecciones

Unmarshalling jaxB no funciona, los objetos son nulos

Unmarshall con JAXB no funciona

ACTUALIZAR

Ahora incluí la siguiente dependencia a mi proyecto

group: ''org.jvnet.jaxb2.maven2'', name: ''maven-jaxb2-plugin'', version: ''0.13.1''

y funciona de nuevo Nueva pregunta, ¿por qué es eso? ¿Hay algo que falta / un error en el lanzamiento de 121 java?


Lo he editado, ya que resulta que el cambio en el JRE no era técnicamente un error, pero 1.8u91 y las versiones anteriores eran más indulgentes y permitían XML con espacios de nombres no válidos, y 1.8u101 + se rompe si xml no tiene el espacio de nombres correcto.

He creado un ejemplo en GitHub para ilustrar la diferencia. Pruebe dos ejecute los dos principales NoSchema y WithSchema utilizando 1.8u91 y 1.8u101 + para ver la diferencia en el comportamiento.

En mi caso, el XML no contenía ningún espacio de nombres predeterminado, pero los elementos no estaban prefijados con el espacio de nombres al que pertenecían ( broker.xml ). Esto funcionó bien en 1.8u91, pero falló en 1.8u101. Aunque la actualización rompió nuestro código, esto técnicamente no es culpa de Oracles, ya que el XML tenía un espacio de nombres incorrecto.