Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Camel Junit调试EndpointInject的自动连线(为null)_Java_Spring_Unit Testing_Apache Camel - Fatal编程技术网

Java Camel Junit调试EndpointInject的自动连线(为null)

Java Camel Junit调试EndpointInject的自动连线(为null),java,spring,unit-testing,apache-camel,Java,Spring,Unit Testing,Apache Camel,编辑:此问题已解决,请参见下文 大家好,骆驼骑士们 我正在测试驼峰路由,并尝试自动连接模拟端点 我试图使用@EndpointInject,但在单元测试期间没有启动它们。在我的@Test方法中,我的模拟端点为空 开始我的测试课程: @RunWith(CamelSpringJUnit4ClassRunner.class) @ContextConfiguration(loader = CamelSpringDelegatingTestContextLoader.class) @DirtiesConte

编辑:此问题已解决,请参见下文

大家好,骆驼骑士们

我正在测试驼峰路由,并尝试自动连接模拟端点

我试图使用
@EndpointInject
,但在单元测试期间没有启动它们。在我的
@Test
方法中,我的模拟端点为空

开始我的测试课程:

@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = CamelSpringDelegatingTestContextLoader.class)
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@DisableJmx(true)
@MockEndpoints("activemq*")
public class MyTest {
MyTest.java
有一个xml应用程序上下文文件,其中包括基本的camel上下文和其他内容。此外,它正在加载一个
@Configuration
bean-spring类,该类注入其他服务,并相应地连接

我有以下字段,我想被注入并自动连接

@Autowired
private CamelContext camelContext;

@EndpointInject(uri = "mock://activemq:queue:b", context="camelContext")
protected MockEndpoint eventUpdatesQueue;

@Produce(uri = "activemq://queue:a?concurrentConsumers=10", context="camelContext")
protected ProducerTemplate testProducer;
camelContext是正确的自动连接,我已经打印出端点键,它们被正确地模拟出来。但是
eventUpdatesQueue
testProducer
null

我已经求助于编写代码来实例化一切,这很好:

eventUpdatesQueue = camelContext.getEndpoint("mock://activemq:queue:a", MockEndpoint.class);
Endpoint testProducer = camelContext.getEndpoint("activemq:queue:b?concurrentConsumers=1");

eventUpdatesQueue.expectedMessageCount(1);

Producer producer = testProducer.createProducer();
Exchange exchange = new DefaultExchange(camelContext);

exchange.getIn().setBody(body());
producer.process(exchange);
eventUpdatesQueue.assertIsSatisfied();
这很好,但是如果
@EndpointInject
能够像我期望的那样工作,那么代码就多了很多


我如何调试这个?如何在测试时正确实例化模拟端点和生产者?我假设
@EndpointInject
会神奇地为我设置正确的端点值。这不正确吗?

这么简单,但又这么难。我的
camelContext
未命名

破碎的:

@EndpointInject(uri = "mock://activemq:queue:b", context="camelContext")
protected MockEndpoint eventUpdatesQueue;
只需删除
context=“camelContext”
,就像雪莱写的那样。。。它还活着

固定的:

@EndpointInject(uri = "mock://activemq:queue:b")
protected MockEndpoint eventUpdatesQueue;

这已经解决了。。。see notescontext=“camelContext”用于通过名称引用特定的camelContext,例如当您有2+或更多时。因此,如果你只有1个CamelContext,那么不要使用它,或者如果你使用了,请确保名称匹配。谢谢克劳斯!顺便说一句,新的rest工具看起来很酷,当它正式上市时使用它很兴奋。请将这个问题标记为已回答。完成-添加了我自己的评论