Маршрут:
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