RE: RE: POSTing dynamic Representations

2006-11-24 Thread Mitch Stewart
Jerome,

I downloaded the latest from Subversion after seeing that you made the fix and 
it all works.

Thanks for the quick response!

Mitch

-Original Message-
From: Jerome Louvel [mailto:[EMAIL PROTECTED] 
Sent: Friday, November 24, 2006 1:50 AM
To: discuss@restlet.tigris.org
Subject: RE: RE: POSTing dynamic Representations


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 À : discuss@restlet.tigris.org 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: discuss@restlet.tigris.org
> 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 À : discuss@restlet.tigris.org 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());
>

RE: RE: POSTing dynamic Representations

2006-11-23 Thread Jerome Louvel

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
> À : discuss@restlet.tigris.org
> 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: discuss@restlet.tigris.org
> 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
> > À : discuss@restlet.tigris.org
> > 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(

RE: RE: POSTing dynamic Representations

2006-11-23 Thread Mitch Stewart
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: discuss@restlet.tigris.org
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
> À : discuss@restlet.tigris.org
> 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 
> 
> 

<>