Hi Mitch, My turn to have a Aha! moment ;-) It's a rather major bug that you found here. I will fix it today and release a new snapshot.
Best regards, Jerome > -----Message d'origine----- > De : Mitch Stewart [mailto:[EMAIL PROTECTED] > Envoyé : vendredi 24 novembre 2006 03:44 > À : [email protected] > Objet : RE: RE: POSTing dynamic Representations > > Jerome, > > Thank you for the response...I thought I had an Aha! moment there. :) > > I've changed my Representation to set the size to > Representation.UNKNOWN_SIZE, however, I still think I am > having a problem. I think the problem lies in the > Message.isEntityAvailable() method, shown here: > > public boolean isEntityAvailable() > { > return (getEntity() != null) && (getEntity().getSize() > 0) > && getEntity().isAvailable(); > } > > The entity is my Representation class which returns a -1 > size, however it is still checking to see if the size of the > entity is greater than 0, not "!=" to 0. This then returns > false, and the calling method, which is > HttpClientCall.sendRequest() still determines that the > Representation entity is null and doesn't send the data. > > Thanks, > > Mitch > > -----Original Message----- > From: Jerome Louvel [mailto:[EMAIL PROTECTED] > Sent: Thu 11/23/2006 3:32 AM > To: [email protected] > Subject: RE: POSTing dynamic Representations > > > Hi Mitch, > > You got nearly everything right. The only thing that you > missed is that when > the size of a Representation is unknown, you need to set it > to -1 (using the > Representation.UNKNOWN_SIZE constant). Setting the size to 0 > means that > there is no content in the representation which is not true > in your case. > > Best regards, > Jerome > > > -----Message d'origine----- > > De : Mitch Stewart [mailto:[EMAIL PROTECTED] > > Envoyé : mercredi 22 novembre 2006 22:19 > > À : [email protected] > > Objet : POSTing dynamic Representations > > > > > > > > I'm using the Restlet HTTP client implementation to post a > > dynamic Representation to my Restlet server implementation, > > however it doesn't look like my data is getting written to > > the HTTP stream. I might be missing something critical, but > > I've been able to understand the API so far. :) My > > Representation class resembles the ObjectRepresentation that > > already exists, except instead of serializing a Java object > > to an ObjectOutputStream, it serializes a Java object to an > > XML stream. But, testing with the ObjectRepresentation > > produces the same result. > > > > Here's the basics of what I am trying to do: > > > > Client client = new Client(Protocol.HTTP); > > Response response = > > client.post("http://somehost.com/someurl", new > > ObjectRepresentation("TestData")); > > > > > > The response variable is not filled with any status or response. > > > > Drilling down through the code I think I found the culprit: > > > > in com.noelios.restlet.http.HttpClientCall.sendRequest() > > there's a check to see if an entity exists: > > > > Representation entity = request.isEntityAvailable() ? > > request.getEntity() : null; > > > > if(entity != null) > > { > > //The code to write the representation to the output stream. > > } > > > > > > The call to request.isEntityAvailable() goes back to the > > org.restlet.data.Message class which checks that the entity > > is not null and that the size of the entity is greater than > > 0. This is where I'm having difficulty. In my Representation, > > I do not know the size of the resulting data prior to it > > being written to the output stream, so my size is 0. However, > > if you look at the > > com.noelios.restlet.ext.net.HttpUrlConnectionCall.sendRequest( > > ) method, you see this: > > > > // Adjust the streaming mode > > if (entity.getSize() > 0) > > { > > // The size of the entity is known in advance > > getConnection().setFixedLengthStreamingMode((int) > > entity.getSize()); > > } > > else > > { > > // The size of the entity is not known in advance > > if (this.clientHelper.getChunkLength() >= 0) > > { > > // Use chunked encoding > > getConnection().setChunkedStreamingMode( > > this.clientHelper.getChunkLength()); > > } > > else > > { > > // Use entity buffering to determine the content length > > } > > } > > > > This suggests that the data I am sending can have a size of > > 0, but when it does it is never sent. And I can't "guess" a > > size, because if I guess wrong then the > > setFixedLengthStreamingMode will cause the HTTP Post to fail > > when more bytes are written than expected. > > > > I guess my question is: When we subclass Representation, do > > we have to calculate the getSize() value or can we allow it > > to be 0? In my case, I don't really want to serialize my Java > > object until absolutely necessary, and I also don't want to > > hold the serialized form of the object in memory prior to > POSTing it. > > > > Am I missing something? Maybe it's not supposed to work this way. > > > > Mitch > > > > > >

