According to XML 1.0, a CDATA section may contain only:
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] http://www.w3.org/TR/2000/REC-xml-20001006#charsets XmlWriter fails to &#XXXX;-encode characters below 0x20, and emits XML which is unparseable by most XML parsers. The following patch fixes this bug. - a Index: src/java/org/apache/xmlrpc/XmlWriter.java =================================================================== RCS file: /home/cvspublic/xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java,v retrieving revision 1.2 diff -u -r1.2 XmlWriter.java --- src/java/org/apache/xmlrpc/XmlWriter.java 8 Aug 2002 21:31:50 -0000 1.2 +++ src/java/org/apache/xmlrpc/XmlWriter.java 18 Aug 2002 00:51:13 -0000 @@ -305,6 +305,11 @@ char c = text.charAt (i); switch (c) { + case '\t': + case '\r': + case '\n': + write(c); + break; case '<': write(LESS_THAN_ENTITY); break; @@ -315,7 +320,13 @@ write(AMPERSAND_ENTITY); break; default: - write(c); + if (c < 0x20 || c > 0xff) { + write("&#"); + write(String.valueOf((int)c)); + write(";"); + } else { + write(c); + } } } }