RE: Client Custom Header

2010-05-06 Thread Jerome Louvel
Hi Jean-Philippe,

 

Both Client and Filter classes extend the base Restlet class and implement the 
Uniform interface, so you should be able to expose the same API to your 
application. 

 

Filters can be chained together, chained with Router and all sorts of Restlet 
handlers that materialize the call process flow. This diagram illustrates the 
intended design: http://www.restlet.org/documentation/2.0/tutorial#part11

 

In your case, I would recommend to use the higher-level ClientResource class 
instead of the Client one to prepare your client-side calls, unless you are 
implementing a reverse proxy or something especially intensive. The 
ClientResource has a “next” property that can be used to point to a Filter or a 
Client to effectively process the client calls.

 

Best regards,
Jerome Louvel
--
Restlet ~ Founder and Technical Lead ~  http://www.restlet.org/ 
http://www.restlet.org
Noelios Technologies ~  http://www.noelios.com/ http://www.noelios.com

 

 

 

 

De : Jean-Philippe Steinmetz [mailto:caskate...@gmail.com] 
Envoyé : mercredi 5 mai 2010 18:07
À : discuss@restlet.tigris.org
Objet : Re: Client Custom Header

 

Hi Jerome,

 

As I said the server side isn't an option and I need to do this systematically. 
The Filter seems like the way to go. You're right that I was sending through 
the client instead of the filter. However my aplication expects a Client object 
and the Filter does not have the same API. Do I need to instead extend Client 
instead of filter?

 

You may want to reconsider how Filter hooks in. It's inappropriate for it to 
change the API. A Filter should really attach to an object, not wrap it. 

Jean-Philippe

 

 


On May 5, 2010, at 4:36 AM, Jerome Louvel jerome.lou...@noelios.com wrote:

Hi Jean-Philippe,

 

If your goal is to systematically add cookies to your client requests, you 
should definitely use the Restlet API (Request#cookies property) instead of 
setting a custom header. To set the cookies on the server-side, you need 
instead to use the Response#cookieSettings property. For complete mapping 
between Restlet API and HTTP headers, check this page:

http://wiki.restlet.org/docs_2.0/13-restlet/27-restlet/324-restlet/130-restlet.html

 

The Client class is a stateless connector that is not appropriate for cookie 
management. It was designed to be shared by several threads/applications. Even 
though it is possible to instantiate several of them in the same JVM, it is 
recommended to share them (of course based on the protocol they support, 
HTTP(S) in your case).

 

I would instead suggest using a CookieFilter in front of the Client to 
systematically add the cookies (maybe based on the target URI…). I don’t see 
why this wouldn’t work as you say in your previous email. Note that your 
“clientHelper” bean doesn’t seem used nor useful.

 

Are you sure that you send outgoing requests to the “myFilter” bean and not 
just to the “client” one? In order for filtering to happen, you need to 
explicitly call it. It will then forward the call to the ‘next’ Restlet 
attached, the “client” one in your case.

 

Also, note that we have a RFE to provide a cookie manager filter, able to store 
cookie settings and to send them again based on target URI and other criteria:

http://restlet.tigris.org/issues/show_bug.cgi?id=42

 

Best regards,
Jerome Louvel
--
Restlet ~ Founder and Technical Lead ~  http://www.restlet.org/ 
http://www.restlet.org
Noelios Technologies ~  http://www.noelios.com/ http://www.noelios.com

 

 

 

 

 

De : Jean-Philippe Steinmetz [mailto:caskate...@gmail.com] 
Envoyé : mercredi 5 mai 2010 04:38
À : discuss@restlet.tigris.org
Objet : Re: Client Custom Header

 

Since no one seems to have responded to this problem I was hoping someone could 
shed some light on cookie setting. Similarly to adding my own header to all 
outgoing client requests I could instead set a cookie. My one requirement here 
is that I don't want to modify every outgoing request individually. In other 
words, the following code won't work...

request.getCookies().add(myCookie, value);

Instead I need a solution where I set the cookie for the Client instance once 
and it is respected across all future connections and requests. Is this 
possible? Or am I really stuck having to add it to every outgoing request? Also 
please note it is not possible to set the cookie on the server side.

On Mon, May 3, 2010 at 5:24 PM, Jean-Philippe Steinmetz caskate...@gmail.com 
wrote:

Hi Stephan,

Thank you for the response. I've implemented a filter and created one while 
setting the next property to be my client but I am not getting any calls to 
the beforeHandle function. My code looks like the following.

class MyFilter extends Filter
{
public MyFilter() { this(null);
public MyFilter(Context context) { this(context, null); }
public MyFilter(Context context, Restlet next) { super(context, next); }

public int beforeHandle(Request request, Response response

RE: Client Custom Header

2010-05-05 Thread Jerome Louvel
Hi Jean-Philippe,

 

If your goal is to systematically add cookies to your client requests, you
should definitely use the Restlet API (Request#cookies property) instead of
setting a custom header. To set the cookies on the server-side, you need
instead to use the Response#cookieSettings property. For complete mapping
between Restlet API and HTTP headers, check this page:

http://wiki.restlet.org/docs_2.0/13-restlet/27-restlet/324-restlet/130-restl
et.html

 

The Client class is a stateless connector that is not appropriate for cookie
management. It was designed to be shared by several threads/applications.
Even though it is possible to instantiate several of them in the same JVM,
it is recommended to share them (of course based on the protocol they
support, HTTP(S) in your case).

 

I would instead suggest using a CookieFilter in front of the Client to
systematically add the cookies (maybe based on the target URI…). I don’t see
why this wouldn’t work as you say in your previous email. Note that your
“clientHelper” bean doesn’t seem used nor useful.

 

Are you sure that you send outgoing requests to the “myFilter” bean and not
just to the “client” one? In order for filtering to happen, you need to
explicitly call it. It will then forward the call to the ‘next’ Restlet
attached, the “client” one in your case.

 

Also, note that we have a RFE to provide a cookie manager filter, able to
store cookie settings and to send them again based on target URI and other
criteria:

http://restlet.tigris.org/issues/show_bug.cgi?id=42

 

Best regards,
Jerome Louvel
--
Restlet ~ Founder and Technical Lead ~  http://www.restlet.org/
http://www.restlet.org
Noelios Technologies ~  http://www.noelios.com/ http://www.noelios.com

 

 

 

 

 

De : Jean-Philippe Steinmetz [mailto:caskate...@gmail.com] 
Envoyé : mercredi 5 mai 2010 04:38
À : discuss@restlet.tigris.org
Objet : Re: Client Custom Header

 

Since no one seems to have responded to this problem I was hoping someone
could shed some light on cookie setting. Similarly to adding my own header
to all outgoing client requests I could instead set a cookie. My one
requirement here is that I don't want to modify every outgoing request
individually. In other words, the following code won't work...

request.getCookies().add(myCookie, value);

Instead I need a solution where I set the cookie for the Client instance
once and it is respected across all future connections and requests. Is this
possible? Or am I really stuck having to add it to every outgoing request?
Also please note it is not possible to set the cookie on the server side.

On Mon, May 3, 2010 at 5:24 PM, Jean-Philippe Steinmetz
caskate...@gmail.com wrote:

Hi Stephan,

Thank you for the response. I've implemented a filter and created one while
setting the next property to be my client but I am not getting any calls
to the beforeHandle function. My code looks like the following.

class MyFilter extends Filter
{
public MyFilter() { this(null);
public MyFilter(Context context) { this(context, null); }
public MyFilter(Context context, Restlet next) { super(context, next); }

public int beforeHandle(Request request, Response response)
{
System.out.println(HIT!);
return CONTINUE;
}
}

And my Spring configuration looks like this...

bean id=client class=org.restlet.Client
constructor-arg index=0
bean class=org.restlet.Context/
/constructor-arg
constructor-arg index=1
util:constant static-field=org.restlet.data.Protocol.HTTP/
/constructor-arg
/bean
bean id=clientHelper
class=com.noelios.restlet.ext.httpclient.HttpClientHelper
constructor-arg ref=client/
/bean
bean id=myFilter class=MyFilter
property name=next ref=client /
/bean

What am I missing? Thanks again.

Jean-Philippe

 

On Sat, May 1, 2010 at 3:49 AM, Stephan Koops stephan.ko...@web.de wrote:

Hi Jean,

the access is on both sides the same. That's an advantage of Restlet.
To add the header for every request you could create a filter. It adds
the header. Instead of send the request directly by the Client object
you set the Client as next Restlet in the filter and your application
sends all request via the filter.
(I hope that's right ...)

best regards
  Stephan

Jean-Philippe Steinmetz schrieb:

 Hi,

 I'm trying to add a custom HTTP header to outgoing requests when using
 the restlet client API. Ideally i'm looking for some way to implement
 a helper class that can inject my header into every request as they
 are processed. However in looking through the documentation i'm not
 really finding what i'm looking for. I see in the FAQ it's possible to
 access headers but this seems to be from the server perspective. How
 do I get access from a client perspective?

 Thanks in advance,

 Jean-Philippe Steinmetz

--
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447
http://restlet.tigris.org/ds/viewMessage.do?dsForumId

Re: Client Custom Header

2010-05-05 Thread Jean-Philippe Steinmetz
Hi Jerome,

As I said the server side isn't an option and I need to do this  
systematically. The Filter seems like the way to go. You're right that  
I was sending through the client instead of the filter. However my  
aplication expects a Client object and the Filter does not have the  
same API. Do I need to instead extend Client instead of filter?

You may want to reconsider how Filter hooks in. It's inappropriate for  
it to change the API. A Filter should really attach to an object, not  
wrap it.

Jean-Philippe



On May 5, 2010, at 4:36 AM, Jerome Louvel jerome.lou...@noelios.com  
wrote:

 Hi Jean-Philippe,



 If your goal is to systematically add cookies to your client  
 requests, you should definitely use the Restlet API (Request#cookies  
 property) instead of setting a custom header. To set the cookies on  
 the server-side, you need instead to use the Response#cookieSettings  
 property. For complete mapping between Restlet API and HTTP headers,  
 check this page:

 http://wiki.restlet.org/docs_2.0/13-restlet/27-restlet/324-restlet/130-restlet.html



 The Client class is a stateless connector that is not appropriate  
 for cookie management. It was designed to be shared by several  
 threads/applications. Even though it is possible to instantiate  
 several of them in the same JVM, it is recommended to share them (of  
 course based on the protocol they support, HTTP(S) in your case).



 I would instead suggest using a CookieFilter in front of the Client  
 to systematically add the cookies (maybe based on the target URI…).  
 I don’t see why this wouldn’t work as you say in your previous  
 email. Note that your “clientHelper” bean doesn’t seem used nor  
 useful.



 Are you sure that you send outgoing requests to the “myFilter”  
 bean and not just to the “client” one? In order for filtering to  
 happen, you need to explicitly call it. It will then forward the cal 
 l to the ‘next’ Restlet attached, the “client” one in your cas 
 e.



 Also, note that we have a RFE to provide a cookie manager filter,  
 able to store cookie settings and to send them again based on target  
 URI and other criteria:

 http://restlet.tigris.org/issues/show_bug.cgi?id=42



 Best regards,
 Jerome Louvel
 --
 Restlet ~ Founder and Technical Lead ~ http://www.restlet.org
 Noelios Technologies ~ http://www.noelios.com











 De : Jean-Philippe Steinmetz [mailto:caskate...@gmail.com]
 Envoyé : mercredi 5 mai 2010 04:38
 À : discuss@restlet.tigris.org
 Objet : Re: Client Custom Header



 Since no one seems to have responded to this problem I was hoping  
 someone could shed some light on cookie setting. Similarly to adding  
 my own header to all outgoing client requests I could instead set a  
 cookie. My one requirement here is that I don't want to modify every  
 outgoing request individually. In other words, the following code  
 won't work...

 request.getCookies().add(myCookie, value);

 Instead I need a solution where I set the cookie for the Client  
 instance once and it is respected across all future connections and  
 requests. Is this possible? Or am I really stuck having to add it to  
 every outgoing request? Also please note it is not possible to set  
 the cookie on the server side.

 On Mon, May 3, 2010 at 5:24 PM, Jean-Philippe Steinmetz caskate...@gmail.com 
  wrote:

 Hi Stephan,

 Thank you for the response. I've implemented a filter and created  
 one while setting the next property to be my client but I am not  
 getting any calls to the beforeHandle function. My code looks like  
 the following.

 class MyFilter extends Filter
 {
 public MyFilter() { this(null);
 public MyFilter(Context context) { this(context, null); }
 public MyFilter(Context context, Restlet next) { super(context,  
 next); }

 public int beforeHandle(Request request, Response response)
 {
 System.out.println(HIT!);
 return CONTINUE;
 }
 }

 And my Spring configuration looks like this...

 bean id=client class=org.restlet.Client
 constructor-arg index=0
 bean class=org.restlet.Context/
 /constructor-arg
 constructor-arg index=1
 util:constant static-field=org.restlet.data.Protocol.HTTP/
 /constructor-arg
 /bean
 bean id=clientHelper  
 class=com.noelios.restlet.ext.httpclient.HttpClientHelper
 constructor-arg ref=client/
 /bean
 bean id=myFilter class=MyFilter
 property name=next ref=client /
 /bean

 What am I missing? Thanks again.

 Jean-Philippe



 On Sat, May 1, 2010 at 3:49 AM, Stephan Koops stephan.ko...@web.de  
 wrote:

 Hi Jean,

 the access is on both sides the same. That's an advantage of Restlet.
 To add the header for every request you could create a filter. It adds
 the header. Instead of send the request directly by the Client object
 you set the Client as next Restlet in the filter and your application
 sends all request via the filter.
 (I hope that's right ...)

 best regards
   Stephan

 Jean-Philippe

Re: Client Custom Header

2010-05-04 Thread Jean-Philippe Steinmetz
Since no one seems to have responded to this problem I was hoping someone
could shed some light on cookie setting. Similarly to adding my own header
to all outgoing client requests I could instead set a cookie. My one
requirement here is that I don't want to modify every outgoing request
individually. In other words, the following code *won't *work...

request.getCookies().add(myCookie, value);

Instead I need a solution where I set the cookie for the Client instance
once and it is respected across all future connections and requests. Is this
possible? Or am I really stuck having to add it to every outgoing request?
Also please note it is *not* possible to set the cookie on the server side.

On Mon, May 3, 2010 at 5:24 PM, Jean-Philippe Steinmetz 
caskate...@gmail.com wrote:

 Hi Stephan,

 Thank you for the response. I've implemented a filter and created one while
 setting the next property to be my client but I am not getting any calls
 to the beforeHandle function. My code looks like the following.

 class MyFilter extends Filter
 {
 public MyFilter() { this(null);
 public MyFilter(Context context) { this(context, null); }
 public MyFilter(Context context, Restlet next) { super(context, next);
 }

 public int beforeHandle(Request request, Response response)
 {
 System.out.println(HIT!);
 return CONTINUE;
 }
 }

 And my Spring configuration looks like this...

 bean id=client class=org.restlet.Client
 constructor-arg index=0
 bean class=org.restlet.Context/
 /constructor-arg
 constructor-arg index=1
 util:constant static-field=org.restlet.data.Protocol.HTTP/
 /constructor-arg
 /bean
 bean id=clientHelper
 class=com.noelios.restlet.ext.httpclient.HttpClientHelper
 constructor-arg ref=client/
 /bean
 bean id=myFilter class=MyFilter
 property name=next ref=client /
 /bean

 What am I missing? Thanks again.

 Jean-Philippe


 On Sat, May 1, 2010 at 3:49 AM, Stephan Koops stephan.ko...@web.dewrote:

 Hi Jean,

 the access is on both sides the same. That's an advantage of Restlet.
 To add the header for every request you could create a filter. It adds
 the header. Instead of send the request directly by the Client object
 you set the Client as next Restlet in the filter and your application
 sends all request via the filter.
 (I hope that's right ...)

 best regards
   Stephan

 Jean-Philippe Steinmetz schrieb:
  Hi,
 
  I'm trying to add a custom HTTP header to outgoing requests when using
  the restlet client API. Ideally i'm looking for some way to implement
  a helper class that can inject my header into every request as they
  are processed. However in looking through the documentation i'm not
  really finding what i'm looking for. I see in the FAQ it's possible to
  access headers but this seems to be from the server perspective. How
  do I get access from a client perspective?
 
  Thanks in advance,
 
  Jean-Philippe Steinmetz

 --

 http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447dsMessageId=2600427




--
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447dsMessageId=2603060

Re: Client Custom Header

2010-05-03 Thread Jean-Philippe Steinmetz
Hi Stephan,

Thank you for the response. I've implemented a filter and created one while
setting the next property to be my client but I am not getting any calls
to the beforeHandle function. My code looks like the following.

class MyFilter extends Filter
{
public MyFilter() { this(null);
public MyFilter(Context context) { this(context, null); }
public MyFilter(Context context, Restlet next) { super(context, next); }

public int beforeHandle(Request request, Response response)
{
System.out.println(HIT!);
return CONTINUE;
}
}

And my Spring configuration looks like this...

bean id=client class=org.restlet.Client
constructor-arg index=0
bean class=org.restlet.Context/
/constructor-arg
constructor-arg index=1
util:constant static-field=org.restlet.data.Protocol.HTTP/
/constructor-arg
/bean
bean id=clientHelper
class=com.noelios.restlet.ext.httpclient.HttpClientHelper
constructor-arg ref=client/
/bean
bean id=myFilter class=MyFilter
property name=next ref=client /
/bean

What am I missing? Thanks again.

Jean-Philippe

On Sat, May 1, 2010 at 3:49 AM, Stephan Koops stephan.ko...@web.de wrote:

 Hi Jean,

 the access is on both sides the same. That's an advantage of Restlet.
 To add the header for every request you could create a filter. It adds
 the header. Instead of send the request directly by the Client object
 you set the Client as next Restlet in the filter and your application
 sends all request via the filter.
 (I hope that's right ...)

 best regards
   Stephan

 Jean-Philippe Steinmetz schrieb:
  Hi,
 
  I'm trying to add a custom HTTP header to outgoing requests when using
  the restlet client API. Ideally i'm looking for some way to implement
  a helper class that can inject my header into every request as they
  are processed. However in looking through the documentation i'm not
  really finding what i'm looking for. I see in the FAQ it's possible to
  access headers but this seems to be from the server perspective. How
  do I get access from a client perspective?
 
  Thanks in advance,
 
  Jean-Philippe Steinmetz

 --

 http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447dsMessageId=2600427


--
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447dsMessageId=2602229

Re: Client Custom Header

2010-05-01 Thread Stephan Koops
Hi Jean,

the access is on both sides the same. That's an advantage of Restlet.
To add the header for every request you could create a filter. It adds 
the header. Instead of send the request directly by the Client object 
you set the Client as next Restlet in the filter and your application 
sends all request via the filter.
(I hope that's right ...)

best regards
   Stephan

Jean-Philippe Steinmetz schrieb:
 Hi,

 I'm trying to add a custom HTTP header to outgoing requests when using 
 the restlet client API. Ideally i'm looking for some way to implement 
 a helper class that can inject my header into every request as they 
 are processed. However in looking through the documentation i'm not 
 really finding what i'm looking for. I see in the FAQ it's possible to 
 access headers but this seems to be from the server perspective. How 
 do I get access from a client perspective?

 Thanks in advance,

 Jean-Philippe Steinmetz

--
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447dsMessageId=2600427