----- Original Message -----
From: "Kevin Jones" <[EMAIL PROTECTED]>
To: "Vincent Massol" <[EMAIL PROTECTED]>
Sent: Saturday, October 13, 2001 5:59 PM
Subject: RE: Sending data to a servlet
> Vincent,
>
> despite the fact that you are 300% over booked (I think that was the
figure)
> :-)
:-)
> Did you manage to do anything on this?
> If it's in CVS I'd like to
> download and play with it? If not, is there anything I can do?
>
Short answer is I haven't done anything on this. Longer answer: Alvin has
proposed himself for the change (see attached email), so I have jumped on
the opportuniy and told him to go ahead ! However, if you could work with
him, that would go even faster. Feel free to contact him but please maintain
all relations through the mailing list so that everyone can know the state
and who's working on what !
Thanks for your help!
-Vincent
> Kevin Jones
> Developmentor
> www.develop.com
>
> > -----Original Message-----
> > From: Kevin Jones [mailto:[EMAIL PROTECTED]]
> > Sent: 10 October 2001 09:57
> > To: [EMAIL PROTECTED]; Vincent Massol
> > Subject: RE: Sending data to a servlet
> >
> >
> > I think this is a great idea :-)
> >
> > Kevin Jones
> > Developmentor
> > www.develop.com
> >
> > > -----Original Message-----
> > > From: Vincent Massol [mailto:[EMAIL PROTECTED]]
> > > Sent: 08 October 2001 21:09
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: Sending data to a servlet
> > >
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: "Kevin Jones" <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Monday, October 08, 2001 6:41 PM
> > > Subject: RE: Sending data to a servlet
> > >
> > >
> > > > Thanks for the reply
> > > >
> > > > > Question: can we put parameters in the URL when sending data
> > > > > using the POST
> > > > > method ? In that case, we could maybe use the getQueryString()
> > > > > method (if it
> > > > > doesn't call getInputStream()) ?
> > > >
> > > > With Tomcat you can definitely pass a query string when using
> > > POST, don't
> > > > know about other servers but without checking the HTTP spec I
> > > would think
> > > > they work also. I also don't see any reason for the server to call
> > > > getInputStream in this case as the query string is passed as
> > part of the
> > > > URL.
> > > >
> > > > Reading the HTTP RFC, I can see nowhere in the spec that POST
handlers
> > > > should ignore the query string.
> > > >
> > >
> > > I checked with the Tomcat guys and it is valid to use HTTP params
> > > in the URL
> > > when POSTing data.
> > >
> > > > I think parsing the query string is the only realistic
> > solution (without
> > > > looking at the code). If I pass data as a serialized object, the
> > > redirector
> > > > has to use get[InputStream|Reader] to get the data, this will
> > interfere
> > > with
> > > > my servlet calling getParameter. If the re-director calls
getParameter
> > > this
> > > > will interfere with my servlet calling get[InputStream|Reader].
> > > >
> > >
> > > You're right. Let's do it in the URL. I'll modify Cactus to
> > > behave this way
> > > first ...
> > >
> > > > If this works then would the idea be to add support for add beginXXX
> > > methods
> > > > that take a WebRequest object that we could 'write' the input data
to?
> > >
> > > ... then I propose to modify WebRequest :
> > > * add a addParameter(String name, String value, String method)
> > > method where
> > > method = {"POST" | "GET"}
> > > * modify the behaviour of the existing addParameter(String name,
String
> > > value) so that it defaults to addParameter(String name, String
> > > value, "GET")
> > > * add a setData(InputStream bodyData) method to pass data to
> > write in the
> > > HTTP request body. If setData() is used, then all added POST
> > > parameters will
> > > be ignored
> > > * force the method to POST if any POST parameters have been added
> > > * add a setContentType(String contentType) method. Content type is
> > > "application/x-www-form-urlencoded" by default. Question: is this
> > > needed ? I
> > > have not looked at multi-part MIME yet.
> > >
> > > What do you think ?
> > > Thanks
> > >
> > > >
> > > > Kevin Jones
> > > > Developmentor
> > > > www.develop.com
> > > >
> > >
> > > -Vincent
> > >
> > > > > -----Original Message-----
> > > > > From: Vincent Massol [mailto:[EMAIL PROTECTED]]
> > > > > Sent: 08 October 2001 17:26
> > > > > To: [EMAIL PROTECTED]
> > > > > Subject: Re: Sending data to a servlet
> > > > >
> > > > >
> > > > > Hi Kevin,
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "Kevin Jones" <[EMAIL PROTECTED]>
> > > > > To: "Cactus-User" <[EMAIL PROTECTED]>
> > > > > Sent: Monday, October 08, 2001 3:49 PM
> > > > > Subject: Sending data to a servlet
> > > > >
> > > > >
> > > > > > I want to send data to a servlet that the servlet retrieves
using
> > > > > > req.getReader. I know that Cactus doesn't support this
> > > directly (and I
> > > > > know
> > > > > > there's an open todo :-) ),
> > > > >
> > > > > hehe ... :)
> > > > >
> > > > > I've tried to write a unit test for Cactus that would use
> > > getReader() as
> > > I
> > > > > didn't see why it would not work ... and it doesn't work
> > ... ! My test
> > > is
> > > > > very simple:
> > > > >
> > > > > public void beginGetReader(WebRequest theRequest)
> > > > > {
> > > > > theRequest.addParameter("test", "some body data");
> > > > > }
> > > > >
> > > > > public void testGetReader() throws Exception
> > > > > {
> > > > > String buffer;
> > > > > StringBuffer body = new StringBuffer();
> > > > > BufferedReader reader = request.getReader();
> > > > > while ((buffer = reader.readLine()) != null) {
> > > > > body.append(buffer);
> > > > > }
> > > > > assertEquals("test=some body data", body.toString());
> > > > > }
> > > > >
> > > > > By default, Cactus sends the parameters using the POST method so
> > > > > getReader()
> > > > > should get the parameter. Ok, I know, if you need to send
> > > some raw data
> > > > > (without the 'xxx = yyy' format) then it wouldn't work but it
> > > > > would be easy
> > > > > to add a new method for that.
> > > > >
> > > > > However, the above test fails and body.toString() is empty. Why ?
> > > > > I believe
> > > > > it is because, internally, Cactus sends other internal
> > > parameters in the
> > > > > http request (such as the name of the test class, the
> > method to call,
> > > ...)
> > > > > and these parameters are extracted by the servlet redirector
(using
> > > > > request.getParameter()) _before_ the testGetReader() is
> > called ... and
> > > > > Servlet API doc says that for a given request, getParameter()
> > > > > [which must be
> > > > > using getInputStream() internally] or getReader() can be called
> > > > > but not both
> > > > > ... [for some reason, using Resin, it does not raise an
> > exception, but
> > > > > returns ""].
> > > > >
> > > > > .....
> > > > >
> > > > > This is a major issue as we absolutely need to pass
> > > (transparently) some
> > > > > context data to the servlet redirector. If we want to be able
> > > to support
> > > > > getReader() [and we do want that !], we need to find another way
> > > > > of passing
> > > > > our internal data .... A solution might be to continue to
> > pass them in
> > > the
> > > > > body and extract them by hand [not using getParameter()] by
calling
> > > > > getReader() [but we will need to be careful not to read on the
> > > > > data for the
> > > > > test part - we could also use a serialized java object]. This
means
> > > there
> > > > > will be 2 cases: tests that uses getInputStream() and tests
> > that uses
> > > > > getReader() ...
> > > > >
> > > > > Question: can we put parameters in the URL when sending data
> > > > > using the POST
> > > > > method ? In that case, we could maybe use the getQueryString()
> > > > > method (if it
> > > > > doesn't call getInputStream()) ?
> > > > >
> > > > > To summarize:
> > > > > * adding support for sending data to servlets is easy if the code
> > > > > under test
> > > > > is using getInputStream() to get that data
> > > > > * adding support for sending data to servlets is difficult if the
> > > > > code under
> > > > > test is using getReader() to get that data
> > > > >
> > > > > > so can I do this 'outside' the scope of Cactus
> > > > > > and still have the tests executed. I.e. can I use an
> > > > > HttpUrlConnection (or
> > > > > > similar) to talk to the re-direction proxy within my
> > > testXXX methods?
> > > > >
> > > > > hum ...
> > > > > * the interface between the Cactus client and the Cactus server
> > > > > parts is not
> > > > > public, meaning it may change in the future (as demonstrated for
> > > > > example by
> > > > > the above analysis which will probably lead to a change),
> > > > > * it would not even work for the reason explained above
> > > (getParameter()
> > > is
> > > > > called before your getReader() code).
> > > > >
> > > > > The only solution is to help us on Cactus correct this
> > bug/limitation
> > > you
> > > > > have found ... ! ;-)
> > > > >
> > > > > Thanks for that !
> > > > >
> > > > > >
> > > > > > Kevin Jones
> > > > > > Developmentor
> > > > > > www.develop.com
> > > > > >
> > > > >
> > > > > -Vincent
> > > > >
> > > > > --
> > > > > Vincent Massol, [EMAIL PROTECTED]
> > > > > OCTO Technology, www.octo.com
> > > > > Information System Architecture Consulting
> > > > >
> > > >
> > > >
> > >
> >
>
>
--- Begin Message ---
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: "Vincent Massol" <[EMAIL PROTECTED]>
Sent: Thursday, October 11, 2001 10:20 PM
Subject: Re: Sending data to a servlet
> Hi Vincent,
>
> Has anyone started work on modifying Cactus to send its parameters
> through the query string?
no, I wanted to do it during the past week but have not found the time.
>
> If not I will try this weekend.
>
good ! Please go ahead :-) You can submit your modifications to the mailing
list with the word [PATCH] in the subject of the mail. Please try to submit
diffs (it is easier to integrate them in the code). Thanks !
> One 'gotcha' appears to be in ServletURL which currently passes the
> URL to simulate with 'addParameter'. Embedding the query string to
> simulate within another query string might cause problems.
>
> One possible solution is to encode the simulated query string
> (Base64?) and decode it on the server.
>
I don't think I understand what you mean. The user can pass it's http
parameters either in the query string or withing the http request body.
Cactus passes its internal data only in the http request. The only thing we
must be careful about choosing different parameter names from the user ones
(and that's already being done in the current Cactus).
> Alvin.
-Vincent
--- End Message ---
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]