dlr 2002/08/19 14:09:16 Modified: src/java/org/apache/xmlrpc XmlWriter.java Log: Patch by Adam Megacz <[EMAIL PROTECTED]> for the following problem (with minor improvments by me): 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. Revision Changes Path 1.3 +17 -2 xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java Index: XmlWriter.java =================================================================== RCS file: /home/cvs/xml-rpc/src/java/org/apache/xmlrpc/XmlWriter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -u -r1.2 -r1.3 --- XmlWriter.java 8 Aug 2002 21:31:50 -0000 1.2 +++ XmlWriter.java 19 Aug 2002 21:09:16 -0000 1.3 @@ -293,8 +293,9 @@ } /** + * Writes text as <code>PCDATA</code>. * - * @param text + * @param text The data to write. * @throws IOException */ protected void chardata(String text) throws IOException @@ -305,6 +306,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 +321,16 @@ write(AMPERSAND_ENTITY); break; default: - write(c); + if (c < 0x20 || c > 0xff) + { + write("&#"); + write(String.valueOf((int)c)); + write(';'); + } + else + { + write(c); + } } } }