Ich vermute, dass etwas falsch ist, wenn ich meine Frühlings- und Kamelkontexte integriere.Nicht in der Lage, Federkomponente in Kamel zu komponieren Komponente
Ich bin Unit-Test eine Camel-Komponente, und ich versuche, eine Bohne (MainframeEncoderProvider) durch Feder-Komponente-Scan generiert zu injizieren. Ich kann sehen, dass die Bean erstellt wird (Breakpointing eines Init-Blocks), und ich kann es in ToFalinkProducerTest automatisch einschießen, aber es wird nicht in die Camel-Komponente aufgenommen. Die Komponente wird über META-INF Auto-Discovery-instanziiert, wenn das relevant ist (http://camel.apache.org/how-do-i-add-a-component.html)
Klasse Test-Setup:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-config/testContext.xml"})
public class ToFalinkProducerTest extends CamelTestSupport{
[some tests...]
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() {
//@formatter:off
from("direct:start")
.to("tofalink:x?encoderName=test")
.to("mock:result");
//@formatter:on
}
};
}
Testcontext:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
">
<!-- lightweight testcontext -->
<context:annotation-config/>
<context:component-scan base-package="net.mo"/>
<camel:camelContext>
<camel:contextScan/>
</camel:camelContext>
</beans>
Komponente:
/**
* Represents the component that manages {@link ToFalinkEndpoint}.
*/
public class ToFalinkComponent extends DefaultComponent {
@Autowired
private MainframeEncoderProvider provider;
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
Endpoint endpoint = new ToFalinkEndpoint(uri, this);
setProperties(endpoint, parameters);
return endpoint;
}
protected MainframeEncoderProvider getProvider() {
return this.provider;
}
}
ist das 'ToFalinkComponent' eine Frühlingsbohne? – pvpkiran
Nicht sicher. Sehen Sie sich meinen Kommentar zur Einrichtung der automatischen Erkennung an. Ich weiß nicht, ob dies der Fall ist oder ob es sich um einen separaten Prozess handelt. – NielsR
Wenn ich die automatische Erkennung für diese Komponente entferne und ToFalinkComponent mit @Component (value = "tofalink") annotate, so baut Spring es auf, der Provider ist immer noch nicht Autowired und Camel kann die Komponente zum Erstellen des Endpunkts nicht finden. – NielsR