es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ignorando el símbolo & en la deserialización JAXB (Java 1.8)

Estoy tratando de deserializar un XML que tiene un esquema más o menos así:

<xs:complextype>
    <xs:sequence>
        <xs:element name="type" type="xs:int" minoccurs="0"></xs:element>
        <xs:element name="scope" type="xs:int" minoccurs="0"></xs:element>
        <xs:element name="code" type="xs:int" minoccurs="0"></xs:element>
        <xs:element name="target" type="xs:string" minoccurs="0"></xs:element>
        <xs:element name="message" type="xs:string" minoccurs="0"></xs:element>
    </xs:sequence>
</xs:complextype>

Utilizo este formato de XML para pasar mensajes en JMS.

Mi problema es que, ocasionalmente, la etiqueta del mensaje contiene una cadena que contiene “&” (por ejemplo: Tom & Jerry). Sé que XML prefiere que sea así “&”. ¿Pero hay alguna manera de ignorar “&” durante la deserialización? Actualmente, está lanzando una excepción:

[org.xml.sax.SAXParseException; lineNumber: 163; columnNumber: 45; The reference to entity &quot;T&quot; must end with the &#39;;'

Cualquier consejo sobre esto sería útil. Puedo hacer cierta manipulación de cadenas, como buscar “&” y reemplazarlo con “&”, y una vez deserializado, simplemente agregar “&” de nuevo. Pero no estoy seguro si funcionaría al 100%.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Es posible ignorar & durante el unmarshalling. Puede usar la anotación @XmlUnescaped para indicarle al unmarshaller que no escape el carácter &. Por ejemplo:

    @XmlUnescaped
    @XmlElement(name = "message")
    private String message;
    

    Esta anotación le indicará al unmarshaller que no escape el carácter &, lo que evitará que ocurra la SAXParseException.

Comments are closed.