akuma8
akuma8

Reputation: 4691

Spring Integration 2.2.3.RELEASE @ServiceActivator not invoked

I have a legacy code with these versions (Spring version: 3.2.1.RELEASE and Spring Integration version 2.2.3.RELEASE). I would like to migrate all xml configurations of spring integration to java configuration. Before starting the migration, I am making some test and I am struggling with @ServiceActivator which does not work. My example is:

@Configuration
@ImportResource("classpath*:integration-config.xml")
public static class IntegrationConfig {
    @Bean
    public MessageChannel queueChannel() {
        return new QueueChannel(5);
    }

    @Bean
    public MessageChannel pubSubChannel() {
        PublishSubscribeChannel publishSubscribeChannel = new PublishSubscribeChannel();
        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("First handler :" + message.getPayload());
            }
        });

        publishSubscribeChannel.subscribe(new MessageHandler() {
            @Override
            public void handleMessage(Message<?> message) throws MessagingException {
                System.out.println("Second handler :" + message.getPayload());
            }
        });
     return publishSubscribeChannel;
    }
}

And :

@MessageEndpoint
public static class MessageEndpointDefintion {

    @ServiceActivator(inputChannel = "queueChannel")
    public void queueActivator(String payload) {
        System.out.println("Payload from queue : " + payload);
    }

    @ServiceActivator(inputChannel = "pubSubChannel")
    public void pubSubActivator(Message<String> message) {
        System.out.println("Payload from pub-sub :" + message.getPayload());
    }
}

When I send some messages in the channels any @ServiceActivator is invoked.

As indicated here: , adding @EnableIntegration (available since version 4 of Spring Integration) could solve the problem, but in my case I am using the version 2.2.3 which does not provide this annotation. If they provide this annotation in this version, I think we can use it but how?

Other question, can I upgrade Spring Integration version to 4 with the same version of Spring (3.2.1)? Thanks

EDIT

I call my configuration like this: AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class); and an example of test:

PublishSubscribeChannel publishSubscribeChannel;
publishSubscribeChannel = (PublishSubscribeChannel) context.getBean("pubSubChannel", MessageChannel.class);
publishSubscribeChannel.send(MessageBuilder.withPayload("==PUB-SUB-CHANNEL== ").build());

And integration-config.xml :

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.springframework.org/schema/c"
   xmlns:int="http://www.springframework.org/schema/integration"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd">

<int:annotation-config/>

<xsd:element name="annotation-config">
    <xsd:annotation>
        <xsd:documentation>
            Enables annotation support for Message Endpoints.
        </xsd:documentation>
    </xsd:annotation>
</xsd:element>

Upvotes: 0

Views: 397

Answers (1)

Artem Bilan
Artem Bilan

Reputation: 121337

You are missing missing to add into your XML config this:

<int:annotation-config/>

<xsd:element name="annotation-config">
    <xsd:annotation>
        <xsd:documentation>
            Enables annotation support for Message Endpoints.
        </xsd:documentation>
    </xsd:annotation>

Unfortunately that old version can't go just with plain annotations. The whole Spring Integration engine is triggered from XML.

And no: you can't upgrade Spring Integration without upgrading Spring Framework.

Upvotes: 1

Related Questions