How do I add my own headers to a request wrapped by ClientResource
in Restlet? For example, I've read that you can use the following when working directly with Client
:
Form headers = (Form) request.getAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
if (headers == null) {
headers = new Form();
request.getAttributes().put("org.restlet.http.headers", responseHeaders);
}
headers.add("X-Some-Header", "the value");
However, I am basically following the code provided in their tutorial and I do not know which member of ClientResource
should be accessed to set headers:
ClientResource clientResource = new ClientResource("http://webserviceurl");
MyClassResource classResource = clientResource.wrap(classResource.class);
MyClass class;
try { class = resource.retrieve(); } catch (Exception e) { System.out.println("fail."); }
What can I do to modify retrieve()
to add some headers?
The ClientResource method has a getRequestAttributes method which is a shortcut for: getRequest().getAttributes()
.
So you can use it in order to specify your custom headers for the request, as described below:
ClientResource cr = new ClientResource("...");
Series<Header> headers = cr.getRequestAttributes().get(
"org.restlet.http.headers");
headers.set("<header-name>", "<header-value>");
Be aware that most of headers are managed by Restlet by default. To see which headers are supported, have a look at the HeaderUtils class: https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/engine/header/HeaderUtils.java.
Edited
With latest versions of Restlet (2.3), a method getHeaders
was added:
ClientResource cr = new ClientResource("...");
Series<Header> headers = cr.getHeaders();
headers.set("<header-name>", "<header-value>");
This corresponds to custom headers.
Hope it will help you. Thierry