任何人都可以在这个关于apache camel的问题上帮助我吗? 我正在尝试执行一条行为如下的路线:
实际问题是: 即使Web服务进程失败,Camel也会将我的文件移动到directoris,failImport和successImport。
这是我的代码片段:
String webservice310 = "localhost:8080/api/importxml/version310";
String webservice200 = "localhost:8080/api/importxml/version200";
String dir = "c:/imports/";
from("file:" + dir + "?include=.*.xml&delay=1000&move=successImport")
.process(new ProcessorXml())
.doTry()
.choice()
.when(header("version").isEqualTo("3.10"))
.to("restlet:"+ webservice310 + "?restletMethod=post")
.when(header("version").isEqualTo("2.00"))
.to("restlet:"+ webservice200 + "?restletMethod=post")
.endDoTry()
.doCatch(XmlBindException.class)
.to("file://" + dir + "failImport");
当我改变这样的路线时:
from("file:" + dir + "?include=.*.xml&delay=1000&move=successImport&moveFailed=failImport")
Camel运行良好,但任何错误都会转到“failImport”,即使这不是我所期望的异常触发的。 如何只移动我在路由“doCatch”块中指定的异常?
答案 0 :(得分:2)
您是否尝试过exception clause?
您的代码看起来像
from("file:" + dir + "?include=.*.xml&delay=1000&move=successImport")
.onException(XmlBindException.class)
.handled(true)
.to("file://" + dir + "failImport")
.end()
.process(new ProcessorXml())
.choice()
.when(header("version").isEqualTo("3.10"))
.to("restlet:"+ webservice310 + "?restletMethod=post")
.when(header("version").isEqualTo("2.00"))
.to("restlet:"+ webservice200 + "?restletMethod=post")
但要小心,如果异常不是XmlBindException,Camel会尝试无休止地重新传递文件
答案 1 :(得分:1)
在尝试了谢尔盖的解决方案之后,我发现我可以使用以下代码实现预期的结果:
String webservice310 = "localhost:8080/api/importxml/version310";
String webservice200 = "localhost:8080/api/importxml/version200";
String dir = "c:/imports/";
from("file:" + dir + "?include=.*.xml&delay=1000&move=successImport&moveFailed=failImport")
.process(new ProcessadorNfe())
.onException(RestletOperationException.class)
.handled(false)
.maximumRedeliveries(-1).delay(60 * 1000)
.end()
.choice()
.when(header("version").isEqualTo("3.10"))
.to("restlet:"+ webservice310 + "?restletMethod=post")
.when(header("version").isEqualTo("2.00"))
.to("restlet:"+ webservice200 + "?restletMethod=post")
正如您所看到的,我使用了" moveFailed"我的路线上的子句,并定制了我的.onException子句,等待服务器启动。 因此,每当服务器关闭时,camel都会等待,但是当它收到另一种异常时,它会将我的文件移动到只有我的文件到failImport文件夹。