1

http://camel.apache.org/http.htmlで指定されているプロデューサーテンプレートを使用して、単純な GET rest サービス呼び出しを呼び出そうとしています。ここでは例として google.com を使用しました。これは、どのコンテナでも実行されていないスタンドアロン クライアントからのものです。私はここで何をしていないのですか?

SpringCamelContext camelcontext = (SpringCamelContext) springContext.getBean("camelcontextbean");

ProducerTemplate template = camelcontext.createProducerTemplate();
camelcontext.start();
Exchange exchange = template.send("http://www.google.com/search", new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "hl=en&q=activemq");
            }
   });

   Message out = exchange.getOut();
System.out.println("Response from http template is "+exchange.getOut().getBody());
   System.out.println("status header is "+out.getHeader(Exchange.HTTP_RESPONSE_CODE));

応答がありません。出力は次のとおりです。

http テンプレートからの応答が null です

ステータス ヘッダーが null です

4

4 に答える 4

5

これは、Spring から camelContext を作成する方法に関係しています。これを削除して、DefaultCamelContextからCamelContextを取得しても、問題は発生しません。

import org.apache.camel.*;
import org.apache.camel.impl.DefaultCamelContext;

public class Main {

    public static void main(String ... args){
        CamelContext camelContext = new DefaultCamelContext();
        ProducerTemplate template = camelContext.createProducerTemplate();

        Exchange exchange = template.send("http://www.google.com/search", new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(Exchange.HTTP_QUERY, "hl=en&q=activemq");
            }
        });

        Message out = exchange.getOut();
        System.out.println("Response from http template is "+exchange.getOut().getBody());
        System.out.println("status header is "+out.getHeader(Exchange.HTTP_RESPONSE_CODE));
    }

}

収量

Response from http template is org.apache.camel.converter.stream.CachedOutputStream$WrappedInputStream@26659db7
status header is 200
于 2012-09-06T22:41:14.397 に答える
2

send メソッドは in only パターンです。request メソッドを使用すると、よりうまくいく可能性があります (公式ドキュメントを参照してください) 。

Exchange exchange = template.request("http://www.google.com/search", new Processor() {
        public void process(Exchange exchange) throws Exception {
            exchange.getIn().setHeader(Exchange.HTTP_QUERY, "hl=en&q=activemq");
        }
});
于 2012-09-06T20:24:10.383 に答える
1

あなたはあなたの応答にアクセスすることができますexchange.getIn().getBody(String.class)

于 2015-02-02T11:48:18.023 に答える
0
Exchange exchange = template.request("http://www.google.com/search", new Processor() {
        public void process(Exchange exchange) throws Exception {
            exchange.getIn().setHeader(Exchange.HTTP_QUERY, "hl=en&q=activemq");
        }
});

本文とヘッダーがある場合に郵便サービスを呼び出す方法。

于 2017-01-05T12:14:01.483 に答える