部署自定义 Spring XD 处理器时出错

Error while deploying custom Spring XD processor

我有一个自定义处理器,我根据示例推文转换器对其进行了建模。使用此处理器部署流后,出现以下错误:

2015-12-18T08:27:17+0100 1.3.0.RELEASE ERROR DeploymentsPathChildrenCache-0 container.DeploymentListener - Exception deploying module
java.lang.IllegalArgumentException: Required module artifacts are either missing or invalid. Unable to determine module type for module definition
: 'processor:my-own-processor'.

我有一个 ModuleConfiguration.java,它看起来像这样(减去进口)

package com.my.package.myprocessor;

@Configuration
@EnableIntegration
public class ModuleConfiguration {
    @Bean
    MessageChannel input() {
        return new DirectChannel();
    }
    @Bean
    MessageChannel output() {
        return new DirectChannel();
    }

    @Bean
    MyProcessor transformer() {
        return new MyProcessor();
    }
}

处理器本身看起来像这样:

package com.my.package.myprocessor;

@MessageEndpoint
public class MyProcessor {

   MyProcessor() {
      // do some initialization      
   }

   @Transformer( inputChannel = "input", outputChannel = "output" )
   public String transform( String payload ) 
   {
      return "Hello World!";
   }
}

我还在src/main/resources下添加了一个spring-module.properties和一个spring-module.xml。两者都被复制到生成的 jar 文件中的 resources/——我在 mvn package.

之后检查了这个

spring-module.properties很简单:

base_packages=com.my.package.myprocessor

和spring-module.xml说明与模块配置相同:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/integration"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             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">
    <channel id="input"/>

    <transformer input-channel="input" output-channel="output">
        <beans:bean class="com.my.package.myprocessor.MyProcessor"/>
    </transformer>

    <channel id="output"/>
</beans:beans>

我是这样上传模块的:

module upload --file ~/Programs/my-processor/target/my-processor-1.0.0.BUILD-SNAPSHOT-runtime-dependencies.jar --name my-processor --type processor

并像这样创建流:

stream create --name my-processor --definition "input: file --mode=lines | aixigo-vgm | output: file" --deploy

我做错了什么?

确实是包装问题。我现在选择 spring 启动插件来打包一个 uber jar,如下所示:

<build>
  <plugins>
     <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>1.3.0.RELEASE</version>
        <configuration>
           <layout>MODULE</layout>
        </configuration>
        <executions>
           <execution>
              <goals>
                 <goal>repackage</goal>
              </goals>
           </execution>
        </executions>
     </plugin>
  </plugins>
</build>

这里最重要的是MODULE布局。 XD 文档中提到了这一点,但其他地方的文档很少。