axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Shankar Unni (JIRA)" <>
Subject [jira] Commented: (AXIS-2025) Illegal XML characters in String arguments and return values cause XML exceptions in Axis calls
Date Mon, 27 Jun 2005 22:55:57 GMT
    [ ] 

Shankar Unni commented on AXIS-2025:

I absolutely can't BELIEVE this!!!!!!  You're missing the point COMPLETELY.


When I use Axis to create an XML/RPC stub, the XML is NOT AN END TO ITSELF. I"m not using
Axis to "compose XML". I'm calling a remote API, AND PASSING IT A LEGAL STRING AS AN ARGUMENT.
 Axis stubs simply act as a convenience stub to generate the transport bytes to make this

The KEY POINTS here are:

* Axis professes to take an API with a String parameter, and pass the string from the server
to the client.
* Ergo, AXIS is responsible for ensuring that the string is transported SAFELY.

The problem that "0x3 is not legal XML" simply means that ***AXIS*** (whose job is to get
one string from one place to another) must take not to send that string as naked XML.

This ***BUG*** makes it utterly impossible to write any sort of sane String API, because you
have to manually intercept *EVERY* string at every API, and encode and decode it yourself.
Why the heck would I use a stub generation API if I'm going to have to manually encode and
decode every string passed to every API?

> Illegal XML characters in String arguments and return values cause XML exceptions in
Axis calls
> -----------------------------------------------------------------------------------------------
>          Key: AXIS-2025
>          URL:
>      Project: Apache Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2
>  Environment: All (but reproduced on WinXP).
> Axis 1.1 and 1.2
>     Reporter: Shankar Unni
>     Assignee: Venkat Reddy
>  Attachments: Axis1.1badmsgAPI.log, Axis1.1echoAPI.log, Axis1.2badmsgAPI.log, Axis1.2echoAPI.log
> Arguments and return values of Java type String are incorrectly handled if they contain
non-printing illegal ASCII characters.
> Example 1: bad return values:
> - - - - - - - - - - - - - - -
> E.g. the string 
>   "bad char: " + (char)3 + "."
> Trivial example:
> foo.jws:
>   public class foo {
>     public String badmsg()
>     {
>       return "bad: " + (char)3 + ".";
>     }
>   }
> When calling this method and the server is running on Axis 1.1, it returns XML with the
illegal character ASCII "3" in the text:
>    <badmsgReturn xsi:type="xsd:string">bad: ?.</badmsgReturn>  
> This causes an XML parse exception on the client side ("org.xml.sax.SAXParseException:
An invalid XML character (Unicode: 0x3) was found in the element content of the document.")
> With Axis 1.2, the server doesn't even return a valid response: I get an HTTP 200 OK
with an empty content, causing a different XML parse error.
> Example 2: bad parameter values:
> - - - - - - - - - - - - - - - -
> A similar problem exists when passing such a string from the the client side.
> If I have a method in foo.jws:
>   public class foo {
>     public String echo(String s)
>     {
>       return s;
>     }
>   }
> Then if I write an ordinary Java client to call this, and pass it a bad string as in
the beginning of this post, I get an exception thrown while the call is being composed:
> java.lang.IllegalArgumentException: The char '0x3' in 'bad char: ?.' is not a valid XML
> This is somewhat absurd: shouldn't the serialization layer be encoding these illegal
XML characters as entity escapes? They're entirely legal in the current locale (US), and normal
Java code handles this character quite normally.  Why should it croak when passed by XML/RPC?

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message