У меня тоже была такая же проблема и при поиске в SO я нашел этот пост. Поскольку я генерирую свои bean-компоненты с помощью xjc, я не хотел добавлять @XmlCData в сгенерированный код.
Поработав некоторое время над хорошим решением, я наконец нашел этот пост: http://javacoalface.blogspot.pt/2012/09/outputting-cdata-sections-with-jaxb.html
Который содержит следующий пример кода:
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
Document document =
docBuilderFactory.newDocumentBuilder().newDocument();
// Marshall the feed object into the empty document.
jaxbMarshaller.marshal(jaxbObject, document);
// Transform the DOM to the output stream
// TransformerFactory is not thread-safe
StringWriter writer = new StringWriter();
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
Transformer nullTransformer = transformerFactory.newTransformer();
nullTransformer.setOutputProperty(OutputKeys.INDENT, "yes");
nullTransformer.setOutputProperty(
OutputKeys.CDATA_SECTION_ELEMENTS,
"myElement myOtherElement");
nullTransformer.transform(new DOMSource(document),
new StreamResult(writer));
Для меня это работает довольно хорошо. Надеюсь, это поможет другим, которые попадают на эту страницу, ищут то же, что и я.