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.

Reply via email to