2012-03-22 18 views
6

¿Cómo agrego mis propios encabezados a una solicitud envuelta por ClientResource en Restlet? Por ejemplo, he leído que se puede utilizar la siguiente cuando se trabaja directamente con Client:Agregue encabezados a la solicitud envuelto por ClientResource en Restlet

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"); 

Sin embargo, estoy siguiendo básicamente el código proporcionado en su tutorial y no sé qué miembro de ClientResource que se debe acceder para establecer cabeceras:

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."); } 

¿Qué puedo hacer para modificar retrieve() añadir algunas cabeceras?

Respuesta

13

El método ClientResource tiene un método getRequestAttributes que es un atajo para: getRequest().getAttributes().

Así se puede utilizar con el fin de especificar sus cabeceras personalizadas para la solicitud, tal como se describe a continuación:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getRequestAttributes().get(
           "org.restlet.http.headers"); 
headers.set("<header-name>", "<header-value>"); 

Tenga en cuenta que la mayoría de las cabeceras son gestionados por Restlet por defecto. Para ver qué encabezados son compatibles, eche un vistazo a la clase HeaderUtils: https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet/src/org/restlet/engine/header/HeaderUtils.java.

Editado

Con las últimas versiones de Restlet (2.3), se añadió un método getHeaders:

ClientResource cr = new ClientResource("..."); 
Series<Header> headers = cr.getHeaders(); 
headers.set("<header-name>", "<header-value>"); 

Esto corresponde a las cabeceras personalizadas.

Espero que te ayude. Thierry

+0

estoy recibiendo el error de seguimiento con este código: coinciden los tipos : no se puede convertir de Object a la serie

ademar111190

+4

Con la versión 2.1.2: Series

encabezados = (Serie
) res.getRequestAttributes(). get ("org.restlet.http.headers"); if (encabezados == nulo) { encabezados = nueva Serie
(Header.class); } headers.add ("usuario", "abcd1"); headers.add ("contraseña", "bienvenida"); –

+0

@ thierry-templier siento inyectar en esta conversación, pero ¿me pueden ayudar en este http://stackoverflow.com/questions/35383763/how-to-get-mediatype-from-request – xybrek

2

Si está utilizando 2.0.x Restlet (la última versión estable), que tiene que hacer esto:

ClientResource resource = new ClientResource(yourUrl); 
Form headers = (Form)resource.getRequestAttributes().get("org.restlet.http.headers"); 
if (headers == null) { 
    headers = new Form(); 
    resource.getRequestAttributes().put("org.restlet.http.headers", headers); 
} 
headers.add("yourHeaderName", yourHeaderValue); 
resource.get(); 
Response response = resource.getResponse(); 
String text = response.getEntity().getText(); 
String status = response.getStatus().toString(); 
Cuestiones relacionadas