我想我已经看到了一种优雅的方式来使用文件作为apache camel中单元测试的输入,但我的谷歌技能让我失望。
我想要的不是:
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
<snip>...long real life xml that quickly fills up test files.</snip>";
template.sendBody("direct:create", xml);
我认为我看到的是像
template.sendBody("direct:create", someCamelMetod("/src/data/someXmlFile.xml"));
有人知道在哪里/是否有记录?
编辑:
我最终做的只是创建一个
private void readFile(String fileName)throws ... function
如果有人知道更好的方式,仍然感兴趣。
答案 0 :(得分:3)
如果我正确理解您的问题,您希望将xml文件作为输入发送到您要测试的路由。我的解决方案是使用adviseWith策略,这是Camel测试支持的一部分。在此处阅读:http://camel.apache.org/testing.html
所以,说测试路线是这样的:
from("jms:myQueue")
.routeId("route-1")
.beanRef(myTransformationBean)
.to("file:outputDirectory");
在测试中,您可以通过从文件轮询使用者中替换它来将xml发送到此路由中。
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
replaceRouteFromWith("route-1", "file:myInputDirectory");
}
});
context.start();
然后,您可以将输入的xml文件放在myInputDirectory中,它将被检测并用作路径的输入。
答案 1 :(得分:0)
不是,你必须自己做一些小工作。您知道,读取文本文件并不那么简单,因为您可能想知道编码。在第一种情况下(内联字符串),您总是使用UTF-16。一个文件可以是任何东西,你必须知道它,因为它不会告诉你它是什么编码。鉴于你有UTF-8,你可以这样做:
public String streamToString(InputStream str){
Scanner scanner = new Scanner(is, "UTF-8").useDelimiter("\\A");
if (scanner.hasNext())
return scanner.next();
return "";
}
// from classpath using ObjectHelper from Camel.
template.sendBody("direct:create", streamToString(ObjectHelper.loadResourceAsStream("/src/data/someXmlFile.xml")));