как получить и установить параметры в Camel HTTP Proxy

1

скажем, для примера у меня есть код:

       from(servlet://abc?id={id}&name={name}).process(new Processor(){
     @Override
        public void process(Exchange arg0) throws Exception {
            id = arg0.getIn().getHeader("id", String.class);
            id_type = arg0.getIn().getHeader("name",String.class);

            System.out.println(id);
            System.out.println(name);
            String url = "//example.com/"+id+"?name="+name;
            System.out.println(url);

            /*Thread.sleep(10000);*/

        }.setHeader(Exchange.HTTP).to("http:"+url+"&bridgeEndpoint=true&throwExceptionOnFailure=false)"

Я не вижу там своего url. показывающий нулевое значение. Как решить эту проблему? Я использовал эту строку в заголовке Exchange, но это дало мне java.lang.IllegalArgumentException:

Теги:
proxy
http
apache-camel

2 ответа

4
Лучший ответ

Попробуйте следующий маршрут:

from("servlet://abc")  
    .process(new Processor(){
        @Override
        public void process(Exchange exchange) throws Exception {
            // Camel will populate all request.parameter and request.headers, 
            // no need for placeholders in the "from" endpoint
            String id = exchange.getIn().getHeader("id", String.class);
            String name = exchange.getIn().getHeader("name", String.class);           

            // This URI will override http://dummyhost
            exchange.getIn().setHeader(Exchange.HTTP_URI, "http://example.com");

            // Add input path. This will override the original input path.
            // If you need to keep the original input path, then add the id to the 
            // URI above instead
            exchange.getIn().setHeader(Exchange.HTTP_PATH, id);

            // Add query parameter such as "?name=xxx"
            exchange.getIn().setHeader(Exchange.HTTP_QUERY, "name="+name);     
    }
    .to("http://dummyhost")

Если вы запрашиваете http://localhost:8080/hello/world?id=111&name=moon, то он должен быть перенаправлен на http://example.com/111?name=moon.

  • 0
    нам не нужно добавлять сюда параметр моста enpoint
  • 0
    @ bks4line Из документа Верблюда: «Если параметр имеет значение true, HttpProducer будет игнорировать заголовок Exchange.HTTP_URI и использовать URI конечной точки для запроса.». Поскольку мы используем Exchange.HTTP_URI , опция bridgeEndpoint не нужна. Использование вместо этого пользовательского параметра header в URI не помогло в моих тестах.
Показать ещё 2 комментария
0

URL не может быть известен, когда верблюд настраивает маршрут.

Вы можете использовать заголовок сообщения Exchange.HTTP_URI, чтобы переопределить настройку конечной точки http.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню