如何在Camel HTTP代理中获取和设置参数

bks*_*ine 2 java proxy http apache-camel

举例来说,我有一个代码:

       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)"
Run Code Online (Sandbox Code Playgroud)

我在那里看不到我的网址。其显示为空值。如何解决这个问题呢?我曾经在Exchange标头中设置此字符串,但它给了我java.lang.IllegalArgumentException:

Pet*_*ler 6

尝试以下路线:

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")
Run Code Online (Sandbox Code Playgroud)

如果您的要求是http://localhost:8080/hello/world?id=111&name=moon,则应将其转发给http://example.com/111?name=moon