Hi,
Thanks for the reply. As the receiving end is an external party I'll
have to check with
them. What I know for now is that they are coding in Delphi.
May I know what is meant by "Avoid normalization of CR to LF"?
code snippet from XmlWriter
-----------------------------------------------
case '\r':
// Avoid normalization of CR to LF.
writeCharacterReference(c);
break;
------------------------------------------------
The code above in XmlWriter.isValidXMLChar(char c) is preventing it to
return true when '/r' is encountered when is XmlWriter.ValidXMLChar(char c)
is called.
We encountered this when we're trying to debug on our side and found it
strange.
Thanks again.
regards
Tor Meng
John Wilson wrote:
> If this is causing you a problem then you are not using an XML parser
> to read the response.
>
> Can you please tell us how you handing the XML-RPC response?
>
> John Wilson
> The Wilson Partnership
> http://www.wilson.co.uk
>
>
Code except from XmlWriter.java
=======================
protected void chardata(String text)
throws XmlRpcException, IOException
{
int l = text.length ();
// ### TODO: Use a buffer rather than going character by
// ### character to scale better for large text sizes.
//char[] buf = new char[32];
for (int i = 0; i < l; i++)
{
char c = text.charAt (i);
switch (c)
{
case '\t':
case '\n':
write(c);
break;
case '\r':
// Avoid normalization of CR to LF.
writeCharacterReference(c);
break;
case '<':
write(LESS_THAN_ENTITY);
break;
case '>':
write(GREATER_THAN_ENTITY);
break;
case '&':
write(AMPERSAND_ENTITY);
break;
default:
// Though the XML spec requires XML parsers to support
// Unicode, not all such code points are valid in XML
// documents. Additionally, previous to 2003-06-30
// the XML-RPC spec only allowed ASCII data (in
// <string> elements). For interoperability with
// clients rigidly conforming to the pre-2003 version
// of the XML-RPC spec, we entity encode characters
// outside of the valid range for ASCII, too.
if (c > 0x7f || !isValidXMLChar(c))
{
// Replace the code point with a character reference.
writeCharacterReference(c);
}
else
{
write(c);
}
}
}
}
/**
* Section 2.2 of the XML spec describes which Unicode code points
* are valid in XML:
*
* <blockquote><code>#x9 | #xA | #xD | [#x20-#xD7FF] |
* [#xE000-#xFFFD] | [#x10000-#x10FFFF]</code></blockquote>
*
* Code points outside this set must be entity encoded to be
* represented in XML.
*
* @param c The character to inspect.
* @return Whether the specified character is valid in XML.
*/
private static final boolean isValidXMLChar(char c)
{
switch (c)
{
case 0x9:
case 0xa: // line feed, '\n'
case 0xd: // carriage return, '\r'
return true;
default:
return ( (0x20 <= c && c <= 0xd7ff) ||
(0xe000 <= c && c <= 0xfffd) ||
(0x10000 <= c && c <= 0x10ffff) );
}
}
|