Ungleiches Escaping beim Marshalling

Wiplash4

Aktives Mitglied
Ich habe ein merkwürdiges Problem. Ich verwende einen JBoss eap 7.3. Ich versuche einen xml String umzuwandeln via einem Marshaller.
Ich erwartete
XML:
<cDataString>&lt;Inhalt&gt;Teststring&lt;/Inhalt&gt;</cDataString>
, aber statt dessen kam
XML:
<cDataString>&lt;Inhalt>Teststring&lt;/Inhalt></cDataString>
. Wie kann es sein dass nur '<', aber nicht '>' richtig dargestellt wird?

Java:
public static String convertClassToXML(Class<?> c, Object o)
{
    final StringWriter sw = new StringWriter();
    JAXBContext.newInstance().createMarshaller().marshal(o);
    return sw.toString();
}

Was könnte solch einen Zustand herbeirufen? Hat das überhaupt mit dem JBoss zu tun?
 
Das ist richtig, XML 1.1 (Second Edition):

The ampersand character (&) and the left angle bracket (<) MUST NOT appear in their literal form, except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section. If they are needed elsewhere, they MUST be escaped using either numeric character references or the strings "&amp;" and "&lt;" respectively. The right angle bracket (>) may be represented using the string "&gt;", and MUST, for compatibility, be escaped using either "&gt;" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section.

Also nur "&" und "<" muessen immer escaped sein. ">" kann escaped sein, muss aber nur dann escaped sein in einem CDATA-Block wenn es den String "]]>" bildet welcher nicht das Ende des CDATA-Blocks ist.
 
Danke für die Info. Allerdings will ich '>' escapen. Wie biege ich meinen Jboss so hin, dass er das konsistent macht? Beim Websphere machte er nämlich noch ohne weiteres.
 
Ich verstehe nicht, warum man so etwas unbedingt durchsetzen will, noch dazu wo es keine Rolle spielt und eigentlich jeder Parser damit klar kommt. Genau deswegen gibt es Standards. Du könntest aber einen Servlet-Filter erstellen, welcher das übernimmt.
 

Zurück
Oben