HttpUtil.java readLine method possibly shouldn't use system default charset to 
create the return String for the input stream header line
----------------------------------------------------------------------------------------------------------------------------------------

                 Key: XMLRPC-164
                 URL: https://issues.apache.org/jira/browse/XMLRPC-164
             Project: XML-RPC
          Issue Type: Bug
    Affects Versions: 3.1.1
         Environment: IBM z/OS  w/ JRE1.4.2
            Reporter: Greg Wurth
            Priority: Minor
             Fix For: 3.1.1


I'm Running with a ServletWebServer on the z/OS platform and receive the 
following exception when processing new request:

Jan 20, 2009 9:35:54 PM org.apache.xmlrpc.webserver.XmlRpcServlet log
INFO: init
Jan 20, 2009 9:35:54 PM org.apache.xmlrpc.server.XmlRpcErrorLogger log
SEVERE: encoding 2: ISO-8859-1
Jan 20, 2009 9:36:05 PM org.apache.xmlrpc.server.XmlRpcErrorLogger log
SEVERE: 400 Bad Request
org.apache.xmlrpc.webserver.ServletWebServer$Exception: 400 Bad Request
        at 
org.apache.xmlrpc.webserver.HttpServletRequestImpl.<init>(HttpServletRequestImpl.java:163)
        at 
org.apache.xmlrpc.webserver.ServletConnection.<init>(ServletConnection.java:50)
        at 
org.apache.xmlrpc.webserver.ServletWebServer.newTask(ServletWebServer.java:145)
        at org.apache.xmlrpc.webserver.WebServer.run(WebServer.java:329)
        at java.lang.Thread.run(Thread.java:571)
Jan 20, 2009 9:36:05 PM org.apache.xmlrpc.server.XmlRpcErrorLogger log
SEVERE: 400 Bad Request
org.apache.xmlrpc.webserver.ServletWebServer$Exception: 400 Bad Request
        at 
org.apache.xmlrpc.webserver.HttpServletRequestImpl.<init>(HttpServletRequestImpl.java:163)
        at 
org.apache.xmlrpc.webserver.ServletConnection.<init>(ServletConnection.java:50)
        at 
org.apache.xmlrpc.webserver.ServletWebServer.newTask(ServletWebServer.java:145)
        at org.apache.xmlrpc.webserver.WebServer.run(WebServer.java:329)
        at java.lang.Thread.run(Thread.java:571)

While tracing, I noticed that  the String returned from the readLine method in 
org.apache.xmlrpc.util.HttpUtil was actually in ebcidic, the default charset on 
z/OS.  This causes a problem in HttpServletRequestImpl while reading the input 
stream header.  HttpServletRequestImpl calls the HttpUtil.readLine method to 
get each input stream header line and then verifies that the line has a colon 
in it.  If there's not a colon the above exception is thrown.  

I'm brand new to using xmlrpc and I don't if I'm using it improperly or not, 
but it seems that the readLine method in HttpUtil should use the webservlet's 
specified encoding or the ASCII charset to build the return String on not 
whatever the platforms default charset is.  When I updated the code to allow 
the "ISO-8859-1" or "US-ASCII" charset be specified in building the String, 
then the exception went away and everything worked like a charm.

See my code change below in HttpUtil:

  public static String readLine(InputStream pIn, byte[] pBuffer) throws 
IOException {
    int next;
    int count = 0;
    while (true)
    {
      next = pIn.read();
      if (next < 0 || next == '\n')
      {
        break;
      }
      if (next != '\r')
      {
        pBuffer[count++] = (byte) next;
      }
      if (count >= pBuffer.length)
      {
        throw new IOException ("HTTP Header too long");
      }
    }
    return new String(pBuffer, 0, count);     ===>    Changed to       return 
new String(pBuffer, 0, count,"ISO-8859-1");
  }

The readLine method in HttpServletRequestImpl actually already does something 
like this (using the US-ASCII charset instead).

I'm just using the buttermountain xmlrpc example that i believe was referenced 
on one of the apache xmlrpc pages.  

I don't know if this is really a bug or if I just need to configure my 
environment differently.  I'm pretty new to Java on the zOS platform and know 
almost nothing about xmlrpc.  

Thanks for your time!
Greg


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to