如何在Camel进程中访问资源中的文件?

时间:2016-12-29 10:51:59

标签: java file-io apache-camel jbossfuse

我正在开发在FUSE服务器上运行的camel应用程序,我试图从我项目的资源文件夹中读取xsd文件,如下所示。但问题是我无法在资源中读取文件的确切路径或文件内容。

enter image description here

我试着阅读" Employee.xsd"文件内部进程如下面的代码,但没有成功。

File file = new File(classLoader.getResource("Employee.xsd").getFile());
String fileContent=FileUtils.readFileToString(file);// Using Commons-IO

如果给出java.io.FileNotFoundException: File '\Employee.xsd' does not exist例外。是否有人能够解决这类问题。

2 个答案:

答案 0 :(得分:2)

您需要从类路径加载文件。

您可以搜索stackoverflow或internet如何从类路径加载资源/文件。

如果您有CamelContext的访问权限,则可以使用其ClassResolver来加载资源。

您可以在javadoc上查看更多相关信息:http://static.javadoc.io/org.apache.camel/camel-core/2.18.1/org/apache/camel/spi/ClassResolver.html

答案 1 :(得分:1)

适用于下一个开始骑骆驼并碰到这个骆驼的人

如果您是在骆驼上下文中进行操作,则似乎无法以通常的方式访问类路径资源(因此,请忽略Claus答案的第一部分)。相反,您需要做的就是像Claus所建议的那样掌握CamelContext并使用它。这是处理器的处理方法中的外观:

public void process(Exchange exchange) throws IOException {

    String getMockResponsePathString = exchange.getContext()
                                               .getClassResolver()
                                               .loadResourceAsURL({$MOCK_RESOURCE_NAME})  
                                               .getPath();

    Path mockResponsePath = Paths.get(mockResponsePathString);
    byte[] mockResponseBytes = Files.readAllBytes(mockResponsePath);
    String mockResponseString = new String(mockResponseBytes);

    exchange.getIn().setBody(mockResponseString);
}