在Spring Boot应用程序的类路径中,我的文件位于“ resources / file.txt”。
我如何在骆驼路线中引用它?
我尝试过:
from(“ file:resource:classpath:?fileName = file.txt”)及其上的变体。似乎没有任何作用。
请问这里有什么解决方法吗?
谢谢
答案 0 :(得分:0)
您不能为此使用文件组件,因为它打算通过java.io.File API进行读取-例如文件系统上的常规文件。此外,许多选项还用于特定于文件的任务,例如读取锁定,移动文件以避免在处理后再次读取它们,删除文件以及扫描到子文件夹等。通过文件交换数据时需要执行的所有任务
要读取JAR文件中的资源,请使用Java API或流组件。
答案 1 :(得分:0)
您可以使用Simple Language
但是,该文件不得包含无法执行的简单语言的说明,例如“ $ {foo.bar}”。
在这种情况下,一个小的Groovy脚本会有所帮助。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-groovy</artifactId>
<version>${version.camel}</version>
</dependency>
import java.nio.charset.Charset
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import org.apache.camel.Exchange
if ( ! request.body ) {
throw new IllegalStateException('ResourcePath in body expected.')
}
URL url = Exchange.getClass().getResource(request.body)
Path path = Paths.get(url.toURI())
result = new String(Files.readAllBytes(path), Charset.forName("UTF-8"))
将文件保存在类路径中,例如/src/main/resources/groovy/ReadClasspathResource.groovy
/**
* Read the file /src/main/resources/foobar/Connector.json
*/
public class CamelReadClasspathResourceTest extends CamelTestSupport
{
@Test
public void run()
throws Exception
{
Exchange exchange = template.send("direct:start", (Processor)null);
Object body = exchange.getMessage().getBody();
System.out.println("body ("+body.getClass().getName()+"): "+body.toString());
}
@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
from("direct:start")
.setBody().constant("/foobar/Connector.json")
.setBody().groovy("resource:classpath:/groovy/ReadClasspathResource.groovy")
.to("mock:result");
}
};
}
}