You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Anindita <An...@cognizant.com> on 2012/04/12 09:11:41 UTC
exchange.getIn().setBody() not working properly for sending the
updated message to the endpoint
Hi,
I have 3 camel flows and i have used my custom processor to change in
message body.
here are my 3 flows and 3 custom Processors-
*camel flow 1:*
from("activemq:queue:*startQ*")
.process(// *Custom Processor 1*//)
.split(body().tokenize(";")).streaming()
.delay(9000)
.choice()
.when(xpath("//inputs/deliveryProperty/inputType = 'File'"))
.to("activemq:queue:*fileQ*")
.when(xpath("//inputs/deliveryProperty/inputType = 'MQ'"))
.to("activemq:queue:*mqQ*")
.otherwise()
.to("activemq:queue:*tempQ*");
*Custom Processor 1:*
public void process(Exchange exchange) throws Exception {
String *newBody *= "";
Message in = exchange.getIn();
if (in != null) {
try {
//calling my custom method for processing input from xml
List<String> configStrList = processConfig((ConfigurationInputType.XML));
for (int i = 0; i < configStrList.size(); i++) {
//modify new body, to enable this for querying (xpath)
*newBody *= newBody+configStrList.get(i);
if (i<configStrList.size()-1) {
<b>newBody *= newBody+";";
}
}
} catch (Exception e) {
throw e;
}
}
*exchange.getIn().setBody(newBody);*
}
*Camel flow 2:*
from("activemq:queue:*fileQ*")
.setHeader("folderName",
xpath("//inputs/deliveryProperty/folderName").stringResult())
.setHeader("fileName",
xpath("//inputs/deliveryProperty/fileName").stringResult())
.setHeader("sourceSystem",
xpath("//inputs/deliveryProperty/sourceSystem").stringResult())
.process(// *Custom Processor 2*//)
.to("activemq:queue:*identificationQ*");
*Custom Processor 2:*
@Override
public void process(Exchange exchange) throws Exception {
String *newBody *= "";
Message in = exchange.getIn();
if (in!= null) {
String folderName = in.getHeader("folderName").toString();
String fileName = in.getHeader("fileName").toString();
String sourceSystem = in.getHeader("sourceSystem").toString(); *newBody
*= processInput(folderName, fileName, sourceSystem);//call my custom method
to get updated string for message body
}
*exchange.getIn().setBody(newBody);*
}
*camel flow 3:*
from("activemq:queue:*identificationQ*")
.process(// *Custom Processor 3*//)
.to("activemq:queue:*routingQ*");
*Custom Processor 3:*
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
String *updatedBodyStr *= "";
if (in != null) {
String inputXmlStr = in.getBody(String.class);
*updatedBodyStr *=
processInputMsg(ConfigurationInputType.XML, inputXmlStr);// my custom method
to get updated string for message body
}
*exchange.getIn().setBody(updatedBodyStr);*
}
1st 2 flows working properly, means- i get updated srint message body inthe
end queue.
but i faced problem for the 3rd flw. it cannt working at all. no exception
i'm getting. but when i'm reading the end Queue for the 3rd flow
(*routingQ*) i just getting the same thing as in source queue for the 3rd
flow i.e. *identificationQ*.
i have tested with
*"System.out.println(exchange.getIn().getBody(String.class));"* after
setting the message in the exchange. i showed the updated one but when i
read from the queue i wont.
i have also tried with *" if (exchange.getPattern().isOutCapable()) {
exchange.getOut().setBody(updatedBodyStr);
} else {
exchange.getIn().setBody(updatedBodyStr);
}"*. again i got the same thing.
i have just messed up.
Please help me.
And sorry for advance, if this kind of post already posted here. I'm posting
it after searching..but i cann't get any thing relevent with my problem.
Sorry.
Anindita
--
View this message in context: http://camel.465427.n5.nabble.com/exchange-getIn-setBody-not-working-properly-for-sending-the-updated-message-to-the-endpoint-tp5634844p5634844.html
Sent from the Camel - Users mailing list archive at Nabble.com.