2016-06-01 11 views
0

Ich versuche, eine Anfrage an einen HTTP-Endpunkt mit Camel Jetty oder Camel HTTP-Komponente zu senden. Ich habe mich gefragt, ob es möglich ist, die Anfrage und Antwort auf HttpServletRequest und HttpServletResponse Objekte zu konvertieren.Get HttpServletRequest und HttpServletResponse von Camel Message Body

Ich habe die folgende Route:

from("direct://processing/callEndpoint") 
    .to("jetty:http://www.google.com") 
    .to("bean:processHttpResponse") 

Ich bin mit Guice für Dependency Injection und "Bean: processHttpResponse" ist folgende:

public class HttpResponseBean { 

    public void processResponse(Exchange exchange) { 

     HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class); 
     HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class); 

    } 
} 

Beide Anfrage und Antwort Objekte sind null. Beim Debugging/Inspizieren von Exchange ist die In-Nachricht ein Byte-Array (Byte []) und die Out-Nachricht ist Null. Nicht sicher, wie es weitergeht.

Antwort

1

Siehe das Camel Jetty zum Beispiel Verbraucher.

Versuchen Sie, Ihre Bean so zu nennen.

from("jetty:http://localhost:{{port}}/myapp/myservice").bean(HttpResponseBean,"processResponse"); 

public class HttpResponseBean { 

    public void processResponse(Exchange exchange) { 

     // we have access to the HttpServletRequest here and we can grab it if we need it 
      HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class); 

    } 
} 
+0

Das Format .bean() (anstelle von .to ("bean:") hat nicht funktioniert. Ich habe das gleiche Ergebnis erhalten. – Khaled

1

Sie sollten einen Prozessor wie diese umzusetzen:

public class MyBean implements Processor { 
    public void process(Exchange exchange) throws Exception { 
     HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class); 
     HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class); 
    } 
} 

Wenn Sie einen @Configuration Frühling Kontext wie diesem

@Configuration 
class ApplicationConfiguration { 

    @Bean 
    public MyBean myBean() { 
    return new MyBean(); 
    } 

} 

haben, sollten Sie in der Lage sein, sich darauf beziehen in der process Aussage wie diese .process("bean:myBean").

Wenn Sie Ihre Route mit einem RouteBuilder erstellen, verwenden Sie bitte SpringCamelContext, damit Camel auf die Beans zugreifen kann.