You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Tuan, Frank" <fr...@amazon.com> on 2005/04/29 20:16:46 UTC
Copying HttpServletRequest
Hi all,
I need some help copying a HttpServletRequest in a Filter. I'm running 5.0.28. So far, this is what I have,
HttpServletRequest oldRequest = (HttpServletRequest)request;
CoyoteRequest newRequest = new CoyoteRequest();
// handle HTTP headers
log.trace ("Setting HTTP headers");
Enumeration headerNames = oldRequest.getHeaderNames();
while (headerNames.hasMoreElements())
{
String headerName = (String)headerNames.nextElement();
String header = oldRequest.getHeader (headerName);
log.trace ("Adding "+headerName+"="+header+" into HTTP header");
newRequest.addHeader (headerName, header);
}
// handle request attributes
log.trace ("Setting request attributes");
Enumeration attributeNames = oldRequest.getAttributeNames();
while (attributeNames.hasMoreElements())
{
String attributeName = (String)attributeNames.nextElement();
Object attribute = oldRequest.getAttribute (attributeName);
log.trace ("Adding "+attributeName+" as a request attribute");
newRequest.setAttribute (attributeName, attribute);
}
log.trace ("Setting request fields");
newRequest.setContextPath (oldRequest.getContextPath());
newRequest.setContentLength (oldRequest.getContentLength());
newRequest.setContentType (oldRequest.getContentType());
newRequest.setMethod (oldRequest.getMethod());
newRequest.setRequestURI (oldRequest.getRequestURI());
newRequest.setServletPath (oldRequest.getServletPath());
newRequest.setStream (new ByteArrayInputStream (requestBody));
RequestDispatcher dispatcher = oldRequest.getRequestDispatcher ("/soap/some-service");
CoyoteRequestFacade facade = new CoyoteRequestFacade (newRequest);
dispatcher.forward (facade, response);
I'm getting the following exception,
2005-04-29 10:49:23 StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.lang.NullPointerException
at org.apache.coyote.tomcat5.CoyoteRequest.getAttribute(CoyoteRequest.java:943)
at org.apache.coyote.tomcat5.CoyoteRequestFacade.getAttribute(CoyoteRequestFacade.java:261)
at org.apache.catalina.core.ApplicationDispatcher.wrapRequest(ApplicationDispatcher.java:979)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:383)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
at com.amazon.fiji.soap.RequestDumpFilter.doFilter(RequestDumpFilter.java:112)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve.java:169)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
What am I missing?
Thanks in advance,
Frank
Re: Copying HttpServletRequest
Posted by Ben Souther <bs...@fwdco.com>.
The normal approach is to wrap the request as opposed to copying it:
http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/http/HttpServletRequestWrapper.html
On Fri, 2005-04-29 at 14:16, Tuan, Frank wrote:
> Hi all,
>
> I need some help copying a HttpServletRequest in a Filter. I'm running 5.0.28. So far, this is what I have,
>
> HttpServletRequest oldRequest = (HttpServletRequest)request;
> CoyoteRequest newRequest = new CoyoteRequest();
>
> // handle HTTP headers
> log.trace ("Setting HTTP headers");
> Enumeration headerNames = oldRequest.getHeaderNames();
> while (headerNames.hasMoreElements())
> {
> String headerName = (String)headerNames.nextElement();
> String header = oldRequest.getHeader (headerName);
> log.trace ("Adding "+headerName+"="+header+" into HTTP header");
> newRequest.addHeader (headerName, header);
> }
>
> // handle request attributes
> log.trace ("Setting request attributes");
> Enumeration attributeNames = oldRequest.getAttributeNames();
> while (attributeNames.hasMoreElements())
> {
> String attributeName = (String)attributeNames.nextElement();
> Object attribute = oldRequest.getAttribute (attributeName);
> log.trace ("Adding "+attributeName+" as a request attribute");
> newRequest.setAttribute (attributeName, attribute);
> }
>
> log.trace ("Setting request fields");
> newRequest.setContextPath (oldRequest.getContextPath());
> newRequest.setContentLength (oldRequest.getContentLength());
> newRequest.setContentType (oldRequest.getContentType());
> newRequest.setMethod (oldRequest.getMethod());
> newRequest.setRequestURI (oldRequest.getRequestURI());
> newRequest.setServletPath (oldRequest.getServletPath());
> newRequest.setStream (new ByteArrayInputStream (requestBody));
>
>
> RequestDispatcher dispatcher = oldRequest.getRequestDispatcher ("/soap/some-service");
> CoyoteRequestFacade facade = new CoyoteRequestFacade (newRequest);
> dispatcher.forward (facade, response);
>
>
> I'm getting the following exception,
>
> 2005-04-29 10:49:23 StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
> java.lang.NullPointerException
> at org.apache.coyote.tomcat5.CoyoteRequest.getAttribute(CoyoteRequest.java:943)
> at org.apache.coyote.tomcat5.CoyoteRequestFacade.getAttribute(CoyoteRequestFacade.java:261)
> at org.apache.catalina.core.ApplicationDispatcher.wrapRequest(ApplicationDispatcher.java:979)
> at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:383)
> at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
> at com.amazon.fiji.soap.RequestDumpFilter.doFilter(RequestDumpFilter.java:112)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
> at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
> at org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve.java:169)
> at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
> at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
> at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
> at java.lang.Thread.run(Thread.java:534)
>
> What am I missing?
>
> Thanks in advance,
> Frank
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org