You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Le...@o2.com on 2004/04/22 08:50:30 UTC

strange behaviour : getReader() --> IllegalStateException --> AxisServlet hangs ...

Hi,

I try to create a filter which is reading the request and response data 
out.
The Response is fine I can read the whole envelope.
For the Request I can read all the Parameters, Attributes, Cookies.

But if I try to read the body then it hangs.

With the following message:

2004-04-22 08:25:21 StandardWrapperValve[AxisServlet]: Servlet.service() 
for servlet AxisServlet threw exception
java.lang.IllegalStateException: getReader() has already been called for 
this request

I have tried this also with the getInputstream the same effect also tried 
it after the chain.doFilter invokation also the same ....

I have no Idea at the moment .........

here is the code for my filter and the request wrapper:

public void doFilter(final ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException 
        { 
                BasicRequestWrapper      requestWrapper  = new BasicRequestWrapper((HttpServletRequest)request);
                String requestString = requestWrapper.toString(); 
                log(requestString);

                OutputStream                     out                     = 
response.getOutputStream(); 
 
                ByteArrayResponseWrapper responseWrapper = new ByteArrayResponseWrapper((HttpServletResponse) response); 
 
                chain.doFilter(requestWrapper, responseWrapper);
 
                out.write(responseWrapper.getData());
                out.close(); 
 
                return;
        } 

public class BasicRequestWrapper extends HttpServletRequestWrapper {
        public BasicRequestWrapper(HttpServletRequest request){
                super(request);
        }

        private String getBodyAsString(){
                StringBuffer buff = new StringBuffer();
                buff.append(" BODY_DATA START [ ");
 
                char[] charArr = new char[getContentLength()];
 
                try{
                        BufferedReader reader = new BufferedReader(getReader());
                        reader.read(charArr, 0, charArr.length);
                        reader.close(); 
                }catch (IOException e) { 
                        e.printStackTrace();
                }
 
                buff.append(charArr);
                buff.append(" ] BODY_DATA END ");
 
                return buff.toString();
        }

        public String toString(){
                return getBodyAsString();
        }
}

Many thanks in advance ......

Levent