gpt4 book ai didi

java - 如何使用 doCatch 在 Apache Camel 中出错后移动文件

转载 作者:行者123 更新时间:2023-11-29 03:16:57 25 4
gpt4 key购买 nike

谁能帮我解决这个关于 apache camel 的问题?我正在尝试执行如下所示的路线:

  1. 将 XML 存档发送到 Web 服务
  2. 如果响应正常,将此文件移动到名为“成功导入”
  3. 如果响应失败,将同一个文件移动到名为“导入失败”

实际问题是:Camel 正在将我的文件移动到两个目录,failImport 和 successImport,即使 web 服务进程失败也是如此。

这是我的代码片段:

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” block 上指定的异常?

最佳答案

你试过了吗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 会不断尝试重新传递文件

关于java - 如何使用 doCatch 在 Apache Camel 中出错后移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com