camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Printing out bean validation exception message causes, well, exception
Date Wed, 28 Mar 2012 07:05:07 GMT
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.bolcina@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: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/

Mime
View raw message