Thanks for your reply Claus.
I changed my code to:
from("file:in").streamcaching().process(new Processor() {
public void process(Exchange theExchange) {
Message originalMessage =
theExchange.getUnitOfWork().getOriginalInMessage();
System.out.println(originalMessage); // 1
System.out.println("Body: " + originalMessage.getBody()); // 2
System.out.println("Body as string: " +
originalMessage.getBody(String.class)); // 3
}
});
Unfortunately this makes no difference - I get the same result.
Also, if I skip Step #2 above I still get "Body as string: null" at step
#3 so I don't think I'm reeading the body twice.
/Bengt
2014-03-12 16:34 GMT+01:00 Claus Ibsen <[email protected]>:
> Hi
>
> No its streams playing tricks on you
> http://camel.apache.org/why-is-my-message-body-empty.html
>
> So you get the body 2 times (at #2 and #3) and the 2nd time its empty.
>
> On Wed, Mar 12, 2014 at 4:29 PM, Bengt Rodehav <[email protected]> wrote:
> > I'm using Camel 2.12.1.
> >
> > For error handling purposes I need access to the original message but I'm
> > having problems with that.
> >
> > In my error handler I do this:
> >
> > Message originalMessage =
> > theExchange.getUnitOfWork().getOriginalInMessage();
> > System.out.println(originalMessage); // 1
> > System.out.println("Body: " + originalMessage.getBody()); // 2
> > System.out.println("Body as string: " +
> > originalMessage.getBody(String.class)); // 3
> >
> > The output at "1" is:
> >
> > TradeSet.xml
> >
> > The output at "2" is:
> >
> > Body:
> >
> GenericFile[C:\dev\karaf\connect-sts\head\apache-karaf2.3.4\bin\..\..\..\common\data\interfaces\ts2so\TradeSet.xml]
> >
> > The output at "3" is:
> >
> > Body as string: null
> >
> > I can reproduce this problem with a simple route that just uses the file
> > component. Something like this:
> >
> > from("file:in").process(new Processor() {
> > public void process(Exchange theExchange) {
> > Message originalMessage =
> > theExchange.getUnitOfWork().getOriginalInMessage();
> > System.out.println(originalMessage); // 1
> > System.out.println("Body: " + originalMessage.getBody()); // 2
> > System.out.println("Body as string: " +
> > originalMessage.getBody(String.class)); // 3
> > }
> > });
> >
> >
> > Thus it seems like I can access the original message but I can't get the
> > actual body content - at least not as a string. In my case the file
> > contains an xml document that I need to get hold of. Is this a known bug
> or
> > have I misunderstood the purpose with the getOriginalMessage() method?
> >
> > /Bengt
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: [email protected]
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> Make your Camel applications look hawt, try: http://hawt.io
>