camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gert Vanthienen <gert.vanthie...@skynet.be>
Subject Re: what is the difference between requestBodyAndHeader and sendBodyAndHeader method ?
Date Tue, 20 May 2008 08:31:16 GMT
J.H.Cha,

The only difference I see when I look at the code, it the message 
ExchangePattern.  requestBodyAndHeader() explicitly sets the pattern to 
InOut, while the sendBodyAndHeader() just leaves the default (InOnly).  
Not sure why this causes a problem in your case though, I would even 
think that InOut would be a more correct representation...

I would guess that the InOut pattern causes the http: endpoint to wait 
on a reply from the jetty: endpoint, but I'm not sure why that doesn't 
happen.  What version of Camel are you using?  To determine what's going 
on here, could you try replacing your http/jetty endpoints with a 
direct:b or something? 

Regards,

Gert


jhcha wrote:
> When I tested two methods  requestBodyAndHeader and sendBodyAndHeader in my
> test source,
> I found the very curious result. 
>
> sendBodyAndHeader  returns ok, but requestBodyAndHeader does not return, and
> hangs...
>
> two methods have the same(?) input parameters and very similar comments.. 
> (Is it different things, endpoint and endpointUri ? ) 
>
> Object requestBodyAndHeader(String endpoint, Object body, String header,
> Object headerValue)
>           Send the body to an endpoint returning any result output body
>           
> Object sendBodyAndHeader(String endpointUri, Object body, String header,
> Object headerValue)
>           Sends the body to an endpoint with a specified header and header
> value
>
> Maybe I should not use requestBodyAndHeader with "direct" end point.
>
> but I need to know the accurate reason for that. 
>
> Would you explain me what is the difference of the two methods, 
> and the correct usage case ?
>
> Thank you.
>
> J. H. Cha
>
> the below source is my test code.
> =============================
>       
>           
> import org.apache.camel.CamelContext;
> import org.apache.camel.CamelTemplate;
> import org.apache.camel.Endpoint;
> import org.apache.camel.Exchange;
> import org.apache.camel.Processor;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.impl.DefaultCamelContext;
> import org.apache.camel.impl.DefaultExchange;
> import org.apache.camel.util.ExchangeHelper;
> import org.apache.log4j.Logger;
>
> public class JettyRequestTest extends Thread {
>
> 	private static final Logger logger =
> Logger.getLogger(JettyRequestTest.class);
>
> 	private static int threads = 1;
>
> 	
> 	public static void main(String[] args) throws Exception {
>
> 		for (int i = 0; i < threads; i++) {
> 			JettyRequestTest client = new JettyRequestTest();
> 			client.start();
> 		}
> 	}
>
> 	@Override
> 	public void run() {
> 		try {
> 			testJettyConsumerEndpoint();
> 		} catch (Exception e) {
> 			logger.fatal("testJmsSpeed fail", e);
> 		}
> 	}
>
> 	public void testJettyConsumerEndpoint() throws Exception {
> 		try {
> 			CamelContext ctx = new DefaultCamelContext();
>
> 			RouteBuilder builder = new ServerRoutes();
> 			ctx.addRoutes(builder);
>
> 			ctx.start();
>
> 			CamelTemplate<DefaultExchange> template = new
> CamelTemplate<DefaultExchange>(ctx);
>
> 			String body = "<hello>world!</hello>";
>
> 			Object result = template.sendBodyAndHeader("direct:start", body,
> "Content-Type",  "application/xml");
> 			Exchange exchange = new DefaultExchange(ctx);
> 			String response = ExchangeHelper.convertToType(exchange, String.class,
> result);
> 			logger.info("response : [" + response + "]");
> 					
> 			// the below line meet hang !!!!								
> 			template.requestBodyAndHeader("direct:start",	body, "Content-Type",
> "application/xml");
>
>
> 			ctx.stop();
> 		} catch (Throwable e) {
> 			if (logger.isEnabledFor(org.apache.log4j.Level.ERROR)) {
> 				logger.error("testJettyConsumerEndpoint()", e);
> 			}
>
> 			e.printStackTrace();
> 		}
> 	}
> }
>
> class ServerRoutes extends RouteBuilder {
> 	@Override
> 	public void configure() throws Exception {
> 		Processor proc = new Processor() {
> 			public void process(Exchange exchange) throws Exception {
> 				String request = exchange.getIn().getBody(String.class);
> 				exchange.getOut(true).setBody(request + " >> processed");
> 			}
> 		};
>
> 		from("jetty:http://localhost:8080/hello").process(proc);
>
> 		from("direct:start").to("http://localhost:8080/hello");
> 	}
> }
>           
>   


Mime
View raw message