Thanks Claus, you rock!

-borut

Dne 28. marec 2012 09:05 je Claus Ibsen <claus.ib...@gmail.com> napisal/-a:

> Hi
>
> You handle the exception, so the getException will return null, and
> therefore you cause a 2nd exception to occur.
>
> The caused exception is stored as a property on the exchange.
> Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
> Exception.class);
>
>
>
> On Wed, Mar 28, 2012 at 8:44 AM, Borut Bolčina <borut.bolc...@gmail.com>
> wrote:
> > Hello,
> >
> > I am using bean-validator component to validate the content of some
> fields:
> >
> > @Override
> > protected RouteBuilder createRouteBuilder() throws Exception {
> >  return new RouteBuilder() {
> > @Override
> > public void configure() throws Exception {
> >  DataFormat jaxbDataFormat = new
> > JaxbDataFormat("com.mycompany.model.entities.weather");
> >  onException(BeanValidationException.class)
> > .handled(true)
> > .process(new Processor() {
> >  public void process(Exchange exchange) throws Exception {
> > String station = ((WeatherCurrent)
> exchange.getIn().getBody()).getStation();
> >  System.out.println("Weather station '" + station + "' does not meet
> > validation constraints. Skipping.");
> > }
> >  });
> >
> >
> from("file:src/test/resources/weather/observation?fileName=observation_si_latest.xml&noop=true")
> >  .split()
> > .tokenizeXML("metData")
> > .unmarshal(jaxbDataFormat)
> >  .to("bean-validator://x")
> > .to("mock:meteo");
> >  }
> > };
> > }
> >
> > Running this test route nicely prints out the weather station which do
> not
> > meet the validation criteria:
> >
> > Weather station 'Bilje pri Novi Gorici' does not meet validation
> > constraints. Skipping.
> > Weather station 'Lisca' does not meet validation constraints. Skipping.
> > Weather station 'Novo mesto' does not meet validation constraints.
> Skipping.
> >
> > Now I wanted to print the cause of the validation error, so I added the
> > exception message in the process method:
> >
> > String exceptionMessage = exchange.getException().getMessage();
> > System.out.println("Weather station '" + station + "' does not meet
> > validation constraints(" + exceptionMessage + "). Skipping.");
> >
> > and suddenly hell broke loose
> >
> > [2012/03/28 08:37:48.648] ERROR [o.a.c.p.FatalFallbackErrorHandler:done]:
> > Exception occurred while trying to handle previously thrown exception on
> > exchangeId: ID-BOBB-54461-1332916666871-0-3 using:
> >
> [Channel[Wrap[com.mycompany.datarobot.weather.WeatherCurrentValidateConditionNotEmptyTest$1$1@15e92d7
> ]
> > ->
> >
> com.mycompany.datarobot.weather.WeatherCurrentValidateConditionNotEmptyTest$1$1@15e92d7
> ]].
> > The previous and the new exception will be logged in the following.
> > [2012/03/28 08:37:48.653] ERROR [o.a.c.p.FatalFallbackErrorHandler:done]:
> > \--> Previous exception on exchangeId: ID-BOBB-54461-1332916666871-0-3
> > org.apache.camel.component.bean.validator.BeanValidationException:
> > Validation failed for:
> > com.mycompany.model.entities.weather.WeatherCurrent@1a4c5b4 errors:
> > [property: conditions; value: jasna; constraint: must match
> "jasno|pretežno
> > jasno|rahlo oblačno|delno oblačno|zmerno oblačno|pretežno
> > oblačno|oblačno|megla"; ]. Exchange[null] at
> >
> org.apache.camel.component.bean.validator.BeanValidator.process(BeanValidator.java:54)
> > ~[camel-bean-validator-2.9.1.jar:2.9.1] at
> >
> org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:101)
> > ~[camel-core-2.9.1.jar:2.9.1]
> > ...
> > FAILED: testNumberOfWeatherStations
> > java.lang.AssertionError: mock://meteo Received message count. Expected:
> > <6> but was: <12>
> > ...
> >
> >
> > What gives?
> >
> > -borut
>
>
>
> --
> Claus Ibsen
> -----------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Email: cib...@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
>

Reply via email to