【问题标题】:NPE when using CamelBlueprintTestSupport使用 CamelBlueprintTestSupport 时的 NPE
【发布时间】:2015-07-27 10:55:28
【问题描述】:

我想用 CamelBlueprintTestSupport 创建一个集成测试。 我启动了我的 Camelcontext,起初看起来不错:

[ main] ingRestJobAdvertApiOfFirstbird INFO 跳过启动 CamelContext 作为系统属性 skipStartingCamelContext 设置为 true。 [主] BlueprintCamelContext INFO Apache Camel 2.15.1.redhat-620133 (CamelContext: camel-1) 正在启动

路线也开始了。但后来我在控制台中收到了这条消息:

在主循环中,我们遇到了严重的问题:java.lang.NullPointerException java.lang.NullPointerException 在 org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:303)

骆驼版:2.15.1.redhat-620133

单元测试:

public class WhenUsingRestJobAdvertApiOfdemo extends CamelBlueprintTestSupport {

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

@Override
protected String[] loadConfigAdminConfigurationFile() {
    return new String[]{"src/test/resources/jobwebsite.connector.properties", "jobwebsite.connector"};
}

@Test
public void testRoute() throws Exception {

    context.addRoutes(new MockServiceEndpoints());
    JobRequest jobRequest = readJoData();
    template.sendBody("direct:createjobIndemo", jobRequest);

    String expectedBody = "<matched/>";
    template.sendBodyAndHeader(expectedBody, "foo", "bar");
}

public  JobRequest readJoData() throws IOException {

    ObjectMapper mapper = new ObjectMapper();

    JobRequest jobRequest = mapper.readValue(new File("src/test/resources/demo-data/job-Advert/job-123.json"), JobRequest.class);

    return jobRequest;
}

}

【问题讨论】:

    标签: java osgi apache-camel


    【解决方案1】:

    骆驼有一个已知问题: https://issues.apache.org/jira/browse/CAMEL-7985

    对我有用的解决方案贴在这里: https://issues.jboss.org/browse/ENTESB-2225。让我们在这里复制有用的评论:

    将项目升级到 6.2 GA 时 - 我的 camel-test-blueprint 单元测试都会过度抛出此 NullPointerException。我查看了错误报告的解决方案并将其应用于我的 pom,它清除了所有 NPE。这是我所做的:

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-blueprint</artifactId>
            <scope>test</scope>
            <!-- Exclude in order to prevent -->
            <!-- java.lang.NullPointerException at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:303) -->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.felix</groupId>
                    <artifactId>org.apache.felix.fileinstall</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    另外,我必须添加以下依赖项:

    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.apache.felix.utils</artifactId>
        <scope>test</scope>
    </dependency>
    

    【讨论】:

    • 这不是答案。考虑将此作为评论。
    【解决方案2】:

    经过进一步研究,我找到了解决方法。我必须阻止捆绑 org.apache.felix.fileinstall 启动。这可以通过覆盖 CamelBlueprintTestSupport 中的 getBundleFilter() 来实现:

    @Override
    protected String getBundleFilter() {
        return "(!(Bundle-SymbolicName=org.apache.felix.fileinstall))";
    }
    

    我仍然不知道这是通用方法还是我的项目设置有问题...

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 2020-01-31
      相关资源
      最近更新 更多