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.