Wie marshall ein string mit JAXB, dass manchmal enthält XML-Inhalt und manchmal nicht?

Betrachten Sie dieses Beispiel -

Habe ich eine Klasse namens Bericht, der ein Feld vom Typ Nachricht. Die Message-Klasse hat ein Feld namens "body" das ist ein string. "Körper" kann eine beliebige Zeichenfolge sein, aber manchmal ist es enthält richtig formatierte XML-Inhalt. Wie kann ich sicherstellen, dass, wenn der "Körper" enthält die XML-Inhalte, die Serialisierung erfolgt in form einer XML-Struktur statt, was gibt es zu präsentieren?

Hier ist der code mit der Ausgabe -

Bericht Klasse

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "Report")
@XmlType(propOrder = { "message"})
public class Report
{
    private Message message;
    public Message getMessage() { return message; }
    public void setMessage(Message m) { message = m; }
}

Nachricht Klasse

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;

@XmlType(propOrder = { "body" })
public class Message
{
    private String body;
    public String getBody() { return body; }
    @XmlElement
    public void setBody(String body) { this.body = body; }
}

Main

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;



public class SerializationTest
{
    public static void main(String args[]) throws Exception
    {
       JAXBContext jaxbContext = JAXBContext.newInstance(Report.class);
       Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
       jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

       Report report = new Report();
       Message message = new Message();

       message.setBody("Sample report message.");
       report.setMessage(message);
       jaxbMarshaller.marshal(report, System.out);

       message.setBody("<rootTag><body>All systems online.</body></rootTag>");
       report.setMessage(message);
       jaxbMarshaller.marshal(report, System.out);
    }
}

Die Ausgabe ist wie folgt -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report>
    <message>
        <body>Sample report message.</body>
    </message>
</Report>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Report>
    <message>
        <body>&lt;rootTag&gt;&lt;body&gt;All systems online.&lt;/body&gt;&lt;/rootTag&gt;</body>
    </message>
</Report>

Wie Sie sehen können in der Ausgabe oben, für die zweite Instanz von "Körper", die Serialisierung erzeugt

 <body>&lt;rootTag&gt;&lt;body&gt;All systems online.&lt;/body&gt;&lt;/rootTag&gt;</body>

statt

<body><rootTag><body>All systems online.</body></rootTag></body>

Wie dieses problem zu lösen?

InformationsquelleAutor CodeBlue | 2012-09-14

Schreibe einen Kommentar