0

ルート :

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

私は得ています

statusCode:411でhttp://remote.com/pathを呼び出すHTTP操作が失敗しました

このルートの何が欠けている/間違っているのですか?

編集

正しいルートは

  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が行うデフォルトの方法のようです。そして、チャンクをオフにする方法がわかりません。

次の質問を参照してください。Camel-http4で「Transfer-EncodingChuncked」をオフにする方法は?

4

1 に答える 1

1

エンコードされていないデータの長さからコンテンツの長さを設定しています。おそらく送信されたデータの長さであるはずです。このSOの質問を参照してください: http圧縮を使用する場合のcontent-length

ちなみに、本当にデータ形式でgzip圧縮する必要がありますか?GZIPされたデータを送信するラクダのユニットテストがあります。

https://svn.apache.org/repos/asf/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java

于 2013-01-17T08:33:57.180 に答える