Camel 蓝图测试中的 ClassNotFoundException

ClassNotFoundException in Camel blueprint test

我正在跟上 FUSE 和 OSGi 的速度,并尝试组合一个简单的蓝图测试来检查 Camel 路由(由另一位开发人员编写):

public class 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.run(Unknown Source)
    at java.net.URLClassLoader.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

包含 class 的依赖项包含在具有测试范围的 POM 文件中:

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

并且我确认该文件在存储库中,并且确实包含所需的文件。看起来生成的 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 测试执行时却失败了。关于为什么会发生此异常的任何想法?我是否遗漏了任何配置步骤?

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