[ 
https://issues.apache.org/jira/browse/FELIX-2774?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Felix Meschberger updated FELIX-2774:
-------------------------------------

    Attachment: FELIX-1962-listeners.patch

Simple patch against the HTTP Base module:

  - Removes the Request Wrapper overwriting getRequestURI method from the game
  - Adds a ServletHandler.handleInclude method which calls the Servlet's 
service method
      without the ServletHandlerRequestWrapper (on the grounds that the path 
related getter
      methods must return the same values)
  - Adds a resetBuffer() call to the forward method

What's still missing is the management of the request attributes mandated by 
the Servlet API specification

Shall we go this route ? Any takers to hack on the request attribute 
provisioning ?

> HTTP Servlet RequestDispatcher 'forward' has invalid request pathInfo
> ---------------------------------------------------------------------
>
>                 Key: FELIX-2774
>                 URL: https://issues.apache.org/jira/browse/FELIX-2774
>             Project: Felix
>          Issue Type: Bug
>          Components: HTTP Service
>    Affects Versions: http-2.0.4
>            Reporter: David Hay
>            Assignee: Felix Meschberger
>         Attachments: FELIX-1962-listeners.patch
>
>
> I'm trying to have one servlet forward to another servlet.  However, the 
> forwarding doesn't seem to work.
> I've set up the proxy servlet in my web.xml as follows (and this is the only 
> servlet...no filters defined)
>     <servlet>
>         <servlet-name>osgi-servlet-bridge</servlet-name>
>         
> <servlet-class>org.apache.felix.http.proxy.ProxyServlet</servlet-class>
>         <load-on-startup>1</load-on-startup>
>     </servlet>
>     <servlet-mapping>
>         <servlet-name>osgi-servlet-bridge</servlet-name>
>         <url-pattern>/*</url-pattern>
>     </servlet-mapping>
> I then have two bundles, each registers a servlet under a different path 
> (e.g. bundle A registers under alias '/a' and bundle B registers under alias 
> '/b') using the whiteboard pattern.  The implementation of servlet A ends up 
> doing this:
> RequestDispatcher rd = request.getRequestDispatcher("/b/some/path");
> rd.forward(request, response);
> This finds the ServletHandler for servlet B just fine, but gets hung up in 
> the 'handle' method. I think this is due to the implementation of the 
> internal RequestWrapper class in the ServletPipeline class.  This 
> implementation overrides the getRequestURI method with the passed in value.  
> However, ServletHandler.handle passed the result of 
> HttpServletRequest.getPathInfo() to the 'matches' method as a final check to 
> make sure that the servlet should be invoked.  Since the RequestWrapper class 
> does not override getPathInfo, it returns the value from the original 
> request....which is '/a' in my example.
>  

-- 
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