2017-06-13 4 views
0

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; 
    } 
} 
+0

ist das 'ToFalinkComponent' eine Frühlingsbohne? – pvpkiran

+0

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

+0

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

Antwort

0

Verwaltet, um dies zu beheben, nach viel herumfuchteln. Die CamelTestSupport-Erweiterung wurde durch CamelSpringTestSupport ersetzt und @RunWith und @ContextConfiguration gelöscht. Implementiert createApplicationContext() mit meiner XML-Spring-Kontextdatei, um das Scannen der Komponenten beizubehalten.

ließ die Auto-Discovery-Mechanik an Ort und Stelle.

Jetzt muss ich nur sehen, ob es zur Laufzeit funktioniert:/