Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用CamelBlueprintTestSupport时的NPE_Java_Osgi_Apache Camel - Fatal编程技术网

Java 使用CamelBlueprintTestSupport时的NPE

Java 使用CamelBlueprintTestSupport时的NPE,java,osgi,apache-camel,Java,Osgi,Apache Camel,我想用CamelBlueprintTestSupport创建一个集成测试。 我开始我的Camelcontext,开始时看起来还行: [main]由于系统属性skipStartingCamelContext设置为true,IngretJobAdvertapiOffirstBird信息跳过启动CamelContext。 [main]BlueprintCamelContext信息Apache Camel 2.15.1.redhat-62013(CamelContext:Camel-1)正在启动 路线也

我想用CamelBlueprintTestSupport创建一个集成测试。 我开始我的Camelcontext,开始时看起来还行:

[main]由于系统属性skipStartingCamelContext设置为true,IngretJobAdvertapiOffirstBird信息跳过启动CamelContext。 [main]BlueprintCamelContext信息Apache Camel 2.15.1.redhat-62013(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;
}
public类whenusingertjobAdvertapiofdemo扩展了CamelBlueprintTest支持{
@凌驾
受保护的字符串getBlueprintDescriptor(){
返回“OSGI-INF/blueprint/blueprint.xml”;
}
@凌驾
受保护的字符串[]loadConfigAdminConfigurationFile(){
返回新字符串[]{“src/test/resources/jobwebsite.connector.properties”,“jobwebsite.connector”};
}
@试验
public void testRoute()引发异常{
addRoutes(新的MockServiceEndpoints());
JobRequest JobRequest=readJoData();
template.sendBody(“direct:createjobIndemo”,jobRequest);
字符串expectedBody=“”;
template.sendbody和header(预期的body,“foo”,“bar”);
}
public JobRequest readJoData()引发IOException{
ObjectMapper mapper=新的ObjectMapper();
JobRequest JobRequest=mapper.readValue(新文件(“src/test/resources/demo data/job Advert/job-123.json”)、JobRequest.class);
返回工作请求;
}

}

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

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

我仍然不知道这是常规方法还是我的项目设置有问题…

camel中有一个已知问题:

适用于我的解决方案发布在此处: . 让我们把有用的评论复制到这里:

当将项目升级到6.2 GA时,我的骆驼测试蓝图单元测试都会抛出这个NullPointerException。我查看了bug报告的解决方案,并将其应用到我的POM中,它清除了所有NPE。以下是我所做的:


org.apache.camel
骆驼测试蓝图
测试
org.apache.felix
org.apache.felix.fileinstall
此外,我还必须添加以下依赖项:


org.apache.felix
org.apache.felix.utils
测试

这不是答案。考虑把这个当作评论。
    <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>