camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Strachan" <james.strac...@gmail.com>
Subject Re: what is the difference between requestBodyAndHeader and sendBodyAndHeader method ?
Date Tue, 20 May 2008 08:28:14 GMT
The idea behind request*() is that they implement InOut semantics
(request-reply) so they block waiting for response - whereas send*()
methods are InOnly (one-way) methods.


2008/5/20 jhcha <jhcha@kds.co.kr>:
>
> 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");
>        }
> }
>
> --
> View this message in context: http://www.nabble.com/what-is-the-difference-between-requestBodyAndHeader-and-sendBodyAndHeader-method---tp17335200s22882p17335200.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://open.iona.com

Mime
View raw message