Camel蓝图测试中的ClassNotFoundException

时间:2015-07-14 18:03:58

标签: java maven osgi apache-camel blueprint-osgi

我正在快速了解FUSE和OSGi并尝试组合一个简单的蓝图测试,该测试应检查Camel路由(由其他开发人员编写):

公共类CamelBrokerTest扩展了CamelBlueprintTestSupport {

@Override
protected String getBlueprintDescriptor() {
    return "OSGI-INF/blueprint/peoplesoft-service.xml";
}

@Test
public void testRoute() throws Exception {
    MockEndpoint endpoint = getMockEndpoint("seda:peopleSoftFinanceSchedulerProcessInstances");
    endpoint.expectedMessageCount(1);
    template.sendBody("activemq:peopleSoftFinanceIncomingFiles", "TRANSACTION_INFO");
    assertMockEndpointsSatisfied();
}

}

然而,当我尝试运行它时,我最终得到了

Caused by: java.lang.ClassNotFoundException: ca.custom.camel.servlet.registry.CamelServletHTTPRegistry
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    ... 40 more

包含该类的依赖项包含在带有测试范围的POM文件中:

    <dependency>
        <groupId>ca.custom</groupId>
        <artifactId>camel-servlet-osgi</artifactId>
        <version>${camel.servlet.osgi.version}</version>
        <scope>test</scope>
    </dependency>

我验证了该文件位于repo中,并且实际上包含了所需的文件。它看起来也像生成的OSGi包描述符具有正确的依赖关系:

Import-Package: ca.custom.camel.servlet.osgi;version="[1.1,2)",ca.
 custom.camel.servlet.registry,ca.mcmaster.uts.service.directory.i
 ntegration;version="[1.2,2)",javax.jws,javax.jws.soap,javax.net.ssl,jav
 ax.security.auth.callback,javax.xml.bind,javax.xml.bind.annotation,java

此代码似乎在生产中运行良好,但在作为JUnit测试执行时失败。有关为什么会发生此异常的任何想法?我错过了任何配置步骤吗?

1 个答案:

答案 0 :(得分:0)

ClassNotFoundException是我所知道的osgi强制你只使用你在清单文件中声明为依赖项的包和包的方式,所以我要检查的是包含你所在类的包的导出包试图使用并查看它是否与您正在使用的导入匹配!另一件事是您尝试使用的捆绑包可能尚未激活!