Spring 集成:自定义入站通道适配器没有此类方法异常

Spring integration: no such method exception for custom inbound channel adapter

我正在尝试从我的 As2MessageHandler class 调用 processMessage 方法作为我使用自定义入站通道适配器进入 spring 集成的入口点。但是我一直收到这个错误,说当它明显在 class:

中时找不到方法

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'as2.source': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: no such method 'processMessage' is available on class com.as2example.myexample.handler.As2MessageHandler

as2MessageHandler class:


@Component
public class As2MessageHandler extends AbstractProcessorModule implements IProcessorStorageModule {

    private static final Logger LOGGER = LoggerFactory.getLogger(As2MessageHandler.class);


    @Override
    public boolean canHandle(@Nonnull String s, @Nonnull IMessage iMessage, @Nullable Map<String, Object> map) {
        LOGGER.info(" Handle Info:" + s);

        return s.equals(DO_STORE);
    }

    @Override
    public void handle(@Nonnull String s, @Nonnull IMessage iMessage, @Nullable Map<String, Object> map) throws AS2Exception {

        LOGGER.info("----- AS2 MESSAGE RECEIVED !!! ------");

        LOGGER.info(iMessage.getContentType());
        LOGGER.info(iMessage.getContentDisposition());
        LOGGER.info(iMessage.getAsString());

        processMessage(iMessage);

    }

    public String processMessage(IMessage message) {

        LOGGER.info("BEGIN PROCESSING MESSAGE");

        return message.getAsString();
    }


}

integration.xml 文件:

<?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:int="http://www.springframework.org/schema/integration"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
         https://www.springframework.org/schema/integration/spring-integration.xsd">



    <int:channel id="as2MessageChannel">
        <int:interceptors>
            <int:wire-tap channel="logger"/>
        </int:interceptors>
    </int:channel>

    <int:logging-channel-adapter id="logger" level="DEBUG"/>


    <int:inbound-channel-adapter id="as2" ref="as2MessageHandler" method="processMessage" channel="as2MessageChannel">

    </int:inbound-channel-adapter>



    <int:service-activator input-channel="as2MessageChannel" ref="orderServiceImpl" auto-startup="true"/>



</beans>

我的应用程序class:

@SpringBootApplication
@ImportResource("classpath:/integration/integration.xml")
public class MyApplication implements ServletContextListener {

    public static void main(String[] args) {


        SpringApplication.run(MyApplication.class, args);
    }


    @Override
    public void contextDestroyed (final ServletContextEvent sce)
    {
        ServletConfig.shutDown ();
        AS2WebAppListener.staticDestroy ();
    }

}

任何人都可以深入了解为什么 spring 集成无法识别来自 As2MessageHandler class 的 processMethod 吗?我试过更改方法以使用 messagebuilder 和 return 消息类型,但这不是问题所在。现在我想它必须是别的东西。

错误正确。它可能会有点误导,因为方法的签名是错误的,而不是它的存在。因此,由于入站通道适配器是流的开始,因此实际上不能为生成消息数据的方法提供任何输入。因此,不清楚您对 IMessage 作为方法输入的期望是什么。

不清楚你的设计是什么,但是<int:inbound-channel-adapter>中的POJO方法被轮询器调用作为消息的数据源。换句话说,作为源的 POJO 方法不能有参数——只有 return。这就是抛出该异常的原因。

我在您的 As2MessageHandler 中没有看到任何可以用作入站通道适配器中消息源的内容。这个看起来更像是一个服务激活器。请修改您的设计以支持真正可以用作该 AS2 协议中的数据源的其他内容。