package com.silverpop.api.client.xmlapi.util; import java.io.Writer; import java.util.regex.Pattern; import com.thoughtworks.xstream.core.util.QuickWriter; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder; public class XmlApiPrintWriter extends PrettyPrintWriter { public static final Pattern SPECIAL_CHARACTERS = Pattern.compile("[&<>\"']"); public static final String CDATA_START = "<![CDATA["; public static final String CDATA_END = "]]>"; public XmlApiPrintWriter(Writer writer, XmlFriendlyNameCoder replacer) { super(writer, replacer); } @Override protected void writeText(QuickWriter writer, String text) { if(hasSpecialCharacters(text)) { writer.write(String.format("%s%s%s", CDATA_START, text, CDATA_END)); } else { super.writeText(writer, text); } } private boolean hasSpecialCharacters(String text) { return SPECIAL_CHARACTERS.matcher(text).find(); } }