Title: Getting short reads

Hi All,

Firstly let me explain my setup:

WebServer (apache httpd using jk2 plugin)
Application server tomcat (jakarta-tomcat-4.1.24)

server.xml entry for AJP:

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" acceptCount="50" bufferSize="2048" connectionTimeout="10000" debug="0" enableLookups="false" maxProcessors="75" minProcessors="20" address="3.130.232.169" port="13763" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" proxyPort="0" redirectPort="8443" scheme="ajp13" secure="false" tcpNoDelay="true" useURIValidationHack="false">

<Factory className="org.apache.catalina.net.DefaultServerSocketFactory"/>
</Connector>

And we are using this application for simple services using HTTP-POST.

Few of the times I get ContentLength in Header > the real size Content in the Stream. As we are using "javax.servlet.http.HttpUtils.parsePostData(...)"

to parse out the POST data we get "java.lang.IllegalArgumentException: Short Read"

----------------HttpUtils's parsePostData Method------------------------

//Take a look at line number 236.
public static Hashtable parsePostData(int len, ServletInputStream in){
/* 218*/        if(len <= 0)
/* 219*/            return new Hashtable();
/* 221*/        if(in == null)
/* 222*/            throw new IllegalArgumentException();
/* 228*/        byte postedBytes[] = new byte[len];
/* 230*/        try
                {
/* 230*/            int offset = 0;
/* 233*/            do
                    {
/* 233*/                int inputLen = in.read(postedBytes, offset, len - offset);
/* 234*/                if(inputLen <= 0)
                        {
/* 235*/                    String msg = lStrings.getString("err.io.short_read");
/* 236*/                    throw new IllegalArgumentException(msg);
                        }
/* 238*/                offset += inputLen;
                    } while(len - offset > 0);
                }
/* 242*/        catch(IOException e)
                {
/* 242*/            throw new IllegalArgumentException(e.getMessage());
                }
/* 251*/        try
                {
/* 251*/            String postedBody = new String(postedBytes, 0, len, "8859_1");
/* 252*/            return parseQueryString(postedBody);
                }
/* 256*/        catch(UnsupportedEncodingException e)
                {
/* 256*/            throw new IllegalArgumentException(e.getMessage());
                }
            }

-------------------------------------------------------------------------------
----Usage Code Snip--------

private void setClientType( HttpServletRequest p_Request) {
        ...       
        Hashtable hash = HttpUtils.parsePostData(p_Request.getContentLength(), p_Request.getInputStream());
        ...
}
--------------------------

----Error on high load---------------

2004-01-13 15:10:43,339|ERROR|java.lang.IllegalArgumentException|java.lang.IllegalArgumentException: Short Read
at javax.servlet.http.HttpUtils.parsePostData(HttpUtils.java:236)
at com.ge.appl.tsf.shells.common.TSFParams.setClientType(Unknown Source)
at com.ge.appl.tsf.shells.common.TSFParams.<init>(Unknown Source)
at com.ge.appl.tsf.shells.web.TSFDispatcher.getParams(Unknown Source)
at com.ge.appl.tsf.shells.web.TSFDispatcher.service(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:562)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:536)


------------------------------

Any pointers or guidance is welcome! I just need to isolate the problem first.


Regards,

Nitin

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to