camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Charles Moulliard <cmoulli...@gmail.com>
Subject Re: Unit test with try/catch block
Date Fri, 11 Sep 2009 13:17:31 GMT
I have created the following route (after looking to the example provided
under camel-core\src\test\java\org\apache\camel\processor\onexception) and I
receive a NPE :

java.lang.IllegalStateException: Failed to load ApplicationContext
    at
org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:201)
    at
org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at ...

...
Caused by: org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'camelBeanPostProcessor': Instantiation of bean
failed; nested exception is
org.springframework.beans.factory.BeanDefinitionStoreException: Factory
method [public final org.apache.camel.spring.CamelBeanPostProcessor ...

Caused by: java.lang.NullPointerException
    at
org.apache.camel.spring.spi.ApplicationContextRegistry.lookupByType(ApplicationContextRegistry.java:60)
    at
org.apache.camel.processor.DefaultChannel.getOrCreateTracer(DefaultChannel.java:176)
    at
org.apache.camel.processor.DefaultChannel.initChannel(DefaultChannel.java:153)
    at
org.apache.camel.model.ProcessorDefinition.wrapChannel(ProcessorDefinition.java:174)
    at
org.apache.camel.model.ProcessorDefinition.wrapProcessor(ProcessorDefinition.java:157)
    at
org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:288)



@ContextConfiguration(locations =
"com.xpectis.x3s.intoout.OinpExampleBadDateFormatTest$ContextConfig", loader
= JavaConfigContextLoader.class)
public class OinpExampleBadDateFormatTest extends
AbstractJUnit4SpringContextTests {

    private static final transient Log LOG =
LogFactory.getLog(OinpExampleBadDateFormatTest.class);

   private static final String uriMockResult = "mock:result";
    private static final String uriMockError = "mock:error";

    @EndpointInject(uri = uriMockResult)
    private MockEndpoint result;

    @EndpointInject(uri = uriMockError)
    private MockEndpoint error;

    // Test OINP_Example-bad_date_format.csv file
    @Test
    @DirtiesContext
    public void testParseFile() throws Exception {

        // We don't expect to have a message as an error will be raised
        result.expectedMessageCount(0);

        // Message has been delivered to the mock error
        error.expectedMessageCount(1);

        result.assertIsSatisfied();
        error.assertIsSatisfied();
    }


    @Configuration
    public static class ContextConfig extends SingleRouteCamelConfiguration
{
        BindyCsvDataFormat oinpDataFormat = new BindyCsvDataFormat("
com.xpectis.x3s.model.backoffice.emx.oinp.in");

        @Override
        @Bean
        public RouteBuilder route() {
            return new RouteBuilder() {

                @Override
                public void configure() {

                    // default should errors go to mock:error

errorHandler(deadLetterChannel(uriMockError).redeliverDelay(0));


onException(Exception.class).maximumRedeliveries(0).handled(true);


from(uriFile).unmarshal(oinpDataFormat).to(uriMockResult);
                }
            };
        }
    }

}


Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer

*****************************
blog : http://cmoulliard.blogspot.com


On Fri, Sep 11, 2009 at 2:36 PM, Claus Ibsen <claus.ibsen@gmail.com> wrote:

> You can use the dead letter channel to move the failed message to a
> mock:dead endpoint which you can use in unit tests.
>
>
> On Fri, Sep 11, 2009 at 2:06 PM, Charles Moulliard <cmoulliard@gmail.com>
> wrote:
> > Hi,
> >
> > I develop a unit to detect if an error has been raised during the parsing
> of
> > a file through Camel-bindy. In this unit test, I don't use a template to
> > produce message as they will be generated by the file endpoint.
> >
> >        try {
> >            // cannot be used as we work with a fileEndpoint -->
> > template.sendBody("direct:start", "");
> >            fail("Exception has been throwed");
> >        } catch (CamelExecutionException ex) {
> >            ...
> >        }
> >
> >
> > How can I check the error generated during file parsing (camel-bindy) ?
> >
> > Here is the route
> >
> > from(uriFile).unmarshal(oinpDataFormat).to(uriMockResult);
> >
> > Error to be catched :
> >
> > 2009-09-11 13:53:48,308 DEBUG GenericFileOnCompletion - Done processing
> > file: GenericFile[OINP_Example-bad_date_format.csv] using exchange:
> > Exchange[GenericFileMessage with file:
> > GenericFile[OINP_Example-bad_date_format.csv]]
> > 2009-09-11 13:53:48,308 ERROR GenericFileOnCompletion - Date provided
> does
> > not fit the pattern defined, position : 43, line nber : 1
> > java.lang.IllegalArgumentException: Date provided does not fit the
> pattern
> > defined, position : 43, line nber : 1
> >
> >
> > Charles Moulliard
> > Senior Enterprise Architect
> > Apache Camel Committer
> >
> > *****************************
> > blog : http://cmoulliard.blogspot.com
> >
>
>
>
> --
> Claus Ibsen
> Apache Camel Committer
>
> Open Source Integration: http://fusesource.com
> Blog: http://davsclaus.blogspot.com/
> Twitter: http://twitter.com/davsclaus
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message