Camel http4 component 411 Bad Content-Length

Маршрут:

  from("direct:start")
  .setProperty(Exchange.CHARSET_NAME, constant("iso-8859-1"))
  .process(new Processor() {            
        @Override
        public void process(Exchange exchange) throws Exception {
          Message m = exchange.getOut();
          m.setBody(exchange.getIn().getBody());
          m.setHeader(Exchange.HTTP_METHOD, HttpMethods.POST);
          m.setHeader(Exchange.CONTENT_ENCODING, "gzip" );
          m.setHeader(Exchange.CONTENT_LENGTH, m.getBody(byte[].class).length );
          m.setHeader(HttpHeaders.CONTENT_TYPE, "application/xml");
          m.setHeader(Exchange.HTTP_CHARACTER_ENCODING, "iso-8859-1");
          m.setHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate");        
        }
    })
  .marshal().gzip()
  .to("http4://remote.com/path")
  .unmarshal().gzip();

Что я отправляю:

String body = "<?xmlversion=\"1.0\"encoding=\"ISO-8859-1\"?><theXml></theXml>";
producer.sendBody(body);

я осознаю

Не удалось выполнить операцию HTTP при вызове http://remote.com/path с кодом статуса: 411

Чего не хватает / что не так с этим маршрутом?

ИЗМЕНИТЬ

Правильный маршрут будет

  from("direct:start")
  .process(new Processor() {            
        @Override
        public void process(Exchange exchange) throws Exception {
          Message m = exchange.getOut();
          m.setBody(exchange.getIn().getBody());
          m.setHeader(Exchange.HTTP_METHOD, HttpMethods.POST);
          m.setHeader(Exchange.CONTENT_ENCODING, "gzip" );
          m.setHeader(Exchange.CONTENT_TYPE, "application/xml");        
        }
    })
  // http4 takes care of compressing/decompressing gzip
  .to("http4://remote.com/path")

Но теперь у меня есть другая проблема: удаленный сервер не обрабатывает «Transfer-Encoding: Chuncked», что, по-видимому, является способом по умолчанию для camel-http4. И я не могу понять, как отключить Chunked.

См. Следующий вопрос https://stackoverflow.com/questions/14382490/how-to-turn-off-transfer-encoding-chuncked-in-camel-http4


person redben    schedule 16.01.2013    source источник
comment
Хм. Код состояния HTTP довольно ясен - сервер ожидает заголовок Content-Length ... но вы явно устанавливаете его в запросе.   -  person Charles    schedule 17.01.2013


Ответы (1)