4
votes

I am working with Camel 2.15.2, Spring 4.1.7.RELEASE, CXF 3.0.4, Junit 4.12.

When I run the following test, loading the Spring application context fails:

@RunWith(CamelSpringJUnit4ClassRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(locations=
            {
                "classpath:com/me/someFile.xml",
                "classpath:META-INF/spring/someFile.xml"
            })
public class MyRouteTest extends CamelTestSupport
{
    //...
}

Here is the exception I am getting:

Caused by: java.lang.IllegalArgumentException: Cannot find RouteContext with id someRoute
    at org.apache.camel.model.RouteContextRefDefinitionHelper.lookupRoutes(RouteContextRefDefinitionHelper.java:65)

But when I run this test, the Spring application context loads successfully:

public class MyRouteTest extends CamelSpringTestSupport
{
    @Override
    protected AbstractApplicationContext createApplicationContext()
    {
        return new ClassPathXmlApplicationContext(new String[]
                {
                    "classpath:com/me/someFile.xml",
                    "classpath:META-INF/spring/someFile.xml"
                });
    }

    //...
}

Why does it fail in the first case?

Aren't these two ways to load the Spring application context equivalent?

1
Have you tried not to extend CamelTestSupport when using annotations?Ralf
@Ralf No because 1. I would like to use many of its cool methods in my test 2. If it matters then it's still not an expected behavior, as far as I know.rapt

1 Answers

0
votes

I think the answer is the same as this question. AbstractApplicationContext versus ApplicationContext Without seeing your actual context files it would be hard to see exactly why the more strict ApplicationContext implementation required by the @ContextConfiguration annotation is failing. Hope this helps!