2012-09-27 18 views
6

estoy usando dropwizard para escribir una aplicación web y también utilizando Jersey cliente como se mencionó al http://dropwizard.codahale.com/manual/client/#man-client-jerseyJersey cliente no establece Content-Length

Pero parece que cada vez que trato de hacer un post utilizando el cliente de la camiseta El servicio web remoto se queja de que el encabezado Content-Length falta y falla.

public JobResponse createJob(JobRequest job) { 
     return jerseyClient.resource(URI.create(JOBS_URL)) 
       .type(MediaType.APPLICATION_JSON_TYPE) 
       .header("Api-Key", job.getApiKey()) 
       .post(JobResponse.class, job); 
    } 

me han confirmado que la solicitud no contiene el encabezado y, a pesar de mis esfuerzos no han sido capaces de averiguar por qué ocurre esto. ¿Alguien sabe si hay algo que me falta?

PS: El servicio que estoy tratando de golpear es https://app.zencoder.com/docs/api/jobs/create

Respuesta

7

Esto se conoce "problema" y el comportamiento que realmente se refiere.

problema aquí es que la entidad se procesa después cabeceras se escriben en "The Wire", por lo tanto el valor cabecera Content-Length no se sabe cuando se serializan cabeceras. Si necesita tenerlo, tiene varias opciones (con varias complejidades):

  1. serialize entity por su cuenta; si proporciona entidad como cadena (o byte []), se debe establecer Content-Length.

  2. crear su propia MessageBodyWriter, lo que calcular el tamaño de la entidad en la getSize() llamada al método.

podría haber alguna otra manera de hacerlo, pero no puedo pensar en otra en este momento ... espero que ayude.

+0

Gracias por su aporte. ¿Sabe si hay un error abierto para esto y yo estaría interesado en saber lo que estas "otras maneras" podrían ser. –

3

que estaba enfrentando el mismo problema y la respuesta de Pavel no funcionó para mí (yo estaba usando un objeto FormMutiPart).

que estaba usando ApacheHttpClient4 en lugar de los com.sun.jersey.api.client.Client. Cambiando de nuevo a la Client Jersey, el Content-Lenght se calcula (al menos en el caso de entidad FormMultiPart).

Cuestiones relacionadas