2014-04-26 25 views
1

可以說一個例子,我有一個代碼:駱駝HTTP代理如何獲取和設置參數

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

我沒有看到我的網址在那裏。其顯示空值。如何解決這個問題呢?我以前在Exchange頭文件中設置了這個字符串,但是它給了我java.lang.IllegalArgumentException:

回答

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

我們不需要在這裏添加bridge enpoint參數 – bks4line

+0

@ bks4line來自Camel的文檔:「如果選項爲true,則HttpProducer將忽略Exchange.HTTP_URI標頭,並使用端點的URI進行請求。」當我們使用'Exchange.HTTP_URI'時,不需要'bridgeEndpoint'選項。要在URI中使用自定義的'header'參數,在我的測試中不起作用。 –

+0

謝謝彼得!感謝您幫助我每一次! :) – bks4line

0

駱駝設置路由時無法知道url。

您可以使用Exchange.HTTP_URI消息頭來覆蓋http端點的設置。