Hi Craig
 
Filter, hmm.
Thanks, I'll look into that :)
 
Rob

        -----Original Message----- 
        From: Craig McClanahan [mailto:[EMAIL PROTECTED] 
        Sent: Fri 16/07/2004 00:34 
        To: Struts Users Mailing List 
        Cc: 
        Subject: Re: calling request.getInputStream() within Action
        
        

        Robert Shields wrote:
        
        >Hi Craig,
        >
        >Yes, I thought as much.
        >Do you know if it's possible to exactly recreate the binary HTTP body from 
parsed parameters, or elsewhere for that matter?
        > 
        >
        The only thing I could think of would be a Filter -- requires Servlet
        2.3 or later -- that would be able to scrape a copy of the incoming
        request, yet still provide getInputStream() and getReader() methods that
        would let the actual servlet being invoked operate normally.
        
        You'll also have to watch out for the complexity that a servlet can call
        *either* getInputStream() *or* getReader() on any single call.  That
        means, among other things, that you'll need to create a request wrapper
        that not only does the copying for you, but also fakes the getReader()
        method, since you'll have already called getInputStream() on the real
        underlying request.
        
        >
        >I'm writing a web proxy using HttpClient - currently I've only tested a 
urlencoded form, which works fine with the following code. I wonder how it will fair 
when it encounters a mutipart form - I haven't tested yet.
        >
        >HttpClient client = new HttpClient();
        >
        >...
        >
        >if (request.getMethod().toLowerCase().equals("post"))
        >
        >{
        >
        >    HttpMethod method = new PostMethod(url.toString());
        >
        >    PostMethod postMethod = (PostMethod)method;
        >
        >    // populate form parameters
        >
        >    Enumeration paramEnum = request.getParameterNames();
        >
        >    while (paramEnum.hasMoreElements()) {
        >
        >        String key = ((String) paramEnum.nextElement());
        >
        >        String[] values = request.getParameterValues(key);
        >
        >        String value = "";
        >
        >        for(int i=0; i<values.length; i++)
        >
        >            value += values[i] + (i < values.length-1 ? "," : "");
        >
        >        postMethod.addParameter(key, value);
        >
        >    }
        >
        >}
        >
        > Sorry for the HTML email - outlook web access :)
        >
        > 
        >
        You'll probably need to check the content type as well ... the above
        works for how browsers normally post data (content type
        "application/x-www-form-urlencoded"), but multipart uploads use
        something different.
        
        On the other hand, if you never call getParameterXxx() type methods in
        your servlet, you should have been able to copy the input stream as in
        your original approach -- you might want to double check that you're not
        doing that.
        
        >Rob
        > 
        >
        
        Craig
        
        >       -----Original Message-----
        >       From: Craig McClanahan [mailto:[EMAIL PROTECTED]
        >       Sent: Thu 15/07/2004 17:50
        >       To: Struts Users Mailing List
        >       Cc:
        >       Subject: Re: calling request.getInputStream() within Action
        >      
        >      
        >
        >       Robert Shields wrote:
        >      
        >       >Hi Bill
        >       >
        >       >Thanks for your response.
        >       >I've tried with a servlet too, but even without calling
        >       >request.getParameter the stream is still empty:
        >       >
        >       >
        >       >
        >       One way to paint yourself into this particular corner is if you're
        >       trying this on a POST request.  As soon as you call a method like
        >       request.getParameter(), the container has to read the content of the
        >       input stream (since that is where the key/value pairs are), so trying 
to
        >       read the stream after that is not going to work.
        >      
        >       Craig
        >      
        >      
        >       ---------------------------------------------------------------------
        >       To unsubscribe, e-mail: [EMAIL PROTECTED]
        >       For additional commands, e-mail: [EMAIL PROTECTED]
        >      
        >      
        >       This e-mail has been scanned for all viruses by Star Internet. The
        >       service is powered by MessageLabs. For more information on a proactive
        >       anti-virus service working around the clock, around the globe, visit:
        >       http://www.star.net.uk
        >       _____________________________________________________________________
        >      
        >
        >
        >This e-mail has been scanned for all viruses by Star Internet. The
        >service is powered by MessageLabs. For more information on a proactive
        >anti-virus service working around the clock, around the globe, visit:
        >http://www.star.net.uk
        >_____________________________________________________________________
        >
        >---------------------------------------------------------------------
        >To unsubscribe, e-mail: [EMAIL PROTECTED]
        >For additional commands, e-mail: [EMAIL PROTECTED]
        >
        > 
        >
        
        
        ---------------------------------------------------------------------
        To unsubscribe, e-mail: [EMAIL PROTECTED]
        For additional commands, e-mail: [EMAIL PROTECTED]
        
        
        This e-mail has been scanned for all viruses by Star Internet. The
        service is powered by MessageLabs. For more information on a proactive
        anti-virus service working around the clock, around the globe, visit:
        http://www.star.net.uk
        _____________________________________________________________________
        


This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
_____________________________________________________________________

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

Reply via email to