Citrus 航班预订样本执行?

Citrus flightbooking sample execution?

我是 Citrus 的新手,所以我尝试执行

航班预订示例,但我遇到了一些问题。首先,我认为有些东西

自述文件有误(readme.md on https://github.com/christophd/citrus-samples/tree/master/sample-flightbooking)。 “进入文件夹并在 Web 容器中启动 BookStore WebService 应用程序。执行此操作的最简单方法是执行”它似乎是另一个示例自述文件的一部分。

当我执行 mvn jetty:run 时,码头服务器启动,但我收到这些消息:

  • retrying using FixedBackOff{interval=5000, currentAttempts=4, maxAttempts=unlimited}. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect 11:18:22,197 ERROR ageListenerContainer| Could not refresh JMS Connection for destination 'Travel.Agency.Request.Queue'

此外,当我尝试 mvn integration-test(码头服务器运行时)时,测试失败并收到这些消息:

[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.575 s <<< FAILURE! - in com.consol.citrus.samples.flightbooking.FlightBookingIT [ERROR] FlightBookingIT(com.consol.citrus.samples.flightbooking.FlightBookingIT) Time elapsed: 1.514 s <<< FAILURE! com.consol.citrus.exceptions.TestCaseFailedException: Test case failed Caused by: org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect Caused by: java.net.ConnectException: Connection refused: connect

localhost:61616 上似乎缺少某些东西(我想是 JMS 代理?)。

能否指导我如何成功执行示例?

(我是运行 Windows 10)

简答

对于您对 Citrus 的第一印象不好,我们深表歉意。您对 README 文件的看法是正确的,这似乎是一个复制粘贴错误。如果会在 repo 中修复它。

要执行的正确 maven 命令是:

mvn clean verify -Dembedded

长答案

embedded 参数将激活 POM 中的两个配置文件,activemq-embeddedjetty-embedded。正如他们的名字所暗示的那样,这将启动一个内存中的 ActiveMQ 代理,以及一个在集成测试之前部署了被测系统的 Jetty 服务器 运行。

请注意,在其他示例中,例如sample-databind,README 建议 运行ning mvn clean install -Dembedded=true。这几乎是一样的,但我更喜欢 verify 生命周期,因为它不会将工件复制到本地 Maven 存储库。此外,配置文件激活的 =true 部分不是必需的,因为一旦 属性 存在(与其实际值无关),就会激活相应的配置文件,请参阅

<activation>
  <property>
    <name>embedded</name>
  </property>
</activation>