在 Spring 应用程序中添加 Apache Camel 自定义 component/endpoint
Adding Apache Camel custom component/endpoint in a Spring application
我正在尝试在 Spring 引导应用程序中实现自定义端点。
目标是使用路线作为:from("...").process("...").to("my:...");
现在,我有 3 个 classes:一个 DefaultConsumer,一个 DefaultEndpoint,一个 DefaultComponent:
package com.my.endpoint;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.support.DefaultEndpoint;
public class MyEndpoint extends DefaultEndpoint {
public MyEndpoint(String uri, MyComponent myComponent) {
}
...
}
package com.my.endpoint;
import org.apache.camel.Endpoint;
import org.apache.camel.Processor;
import org.apache.camel.support.DefaultConsumer;
public class MyConsumer extends DefaultConsumer {
public MyConsumer(Endpoint endpoint, Processor processor) {
super(endpoint, processor);
}
}
package com.my.endpoint;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;
import java.util.Map;
@Component("my")
public class MyComponent extends DefaultComponent {
public MyComponent(CamelContext camelContext) {
super(camelContext);
}
...
}
现在:如何注册?
在 Spring 配置 class 中,我有:
@Override
public void configure() throws Exception {
camelContext.addComponent("my", new MyComponent(camelContext));
但不工作:
Caused by: org.apache.camel.NoSuchEndpointException: No endpoint could be found for: my, please check your classpath contains the needed Camel component jar.
因此,我在 services/org/apache/camel/component/my 中添加了 META-INF 文件:
class=com.my.endpoint.MyComponent
但是这也是行不通的。
没有关于如何实现它的完整教程。
有什么帮助吗?
注意:我正在尝试实施端点,因为我需要使用我的数据类型来集成我的系统。我尝试使用 Transformer 但因为这个失败了:Set a custom DataType in Apache Camel Processor
之前,我尝试过使用数据类型转换器,但因此失败了(标记为重复,因为人们懒得真正理解问题):Enforce type conversion on Rest consumer in Apache Camel
我已完整阅读“Apache Camel In Action,第二版”,但目前我无法继续我的项目,因为?
这是因为自定义组件必须通过@UriEndpoint
注解进行注解。
解决此问题的另一种方法:通过构造函数或通过在 MyEndpoint 中实现 createEndpointUri() 来设置 EndpointUri。
最简单的方法可能是将构造函数更改为:
public MyEndpoint(String uri, MyComponent myComponent) {
super(uri, myComponent);
}
我正在尝试在 Spring 引导应用程序中实现自定义端点。
目标是使用路线作为:from("...").process("...").to("my:...");
现在,我有 3 个 classes:一个 DefaultConsumer,一个 DefaultEndpoint,一个 DefaultComponent:
package com.my.endpoint;
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.support.DefaultEndpoint;
public class MyEndpoint extends DefaultEndpoint {
public MyEndpoint(String uri, MyComponent myComponent) {
}
...
}
package com.my.endpoint;
import org.apache.camel.Endpoint;
import org.apache.camel.Processor;
import org.apache.camel.support.DefaultConsumer;
public class MyConsumer extends DefaultConsumer {
public MyConsumer(Endpoint endpoint, Processor processor) {
super(endpoint, processor);
}
}
package com.my.endpoint;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;
import java.util.Map;
@Component("my")
public class MyComponent extends DefaultComponent {
public MyComponent(CamelContext camelContext) {
super(camelContext);
}
...
}
现在:如何注册?
在 Spring 配置 class 中,我有:
@Override
public void configure() throws Exception {
camelContext.addComponent("my", new MyComponent(camelContext));
但不工作:
Caused by: org.apache.camel.NoSuchEndpointException: No endpoint could be found for: my, please check your classpath contains the needed Camel component jar.
因此,我在 services/org/apache/camel/component/my 中添加了 META-INF 文件:
class=com.my.endpoint.MyComponent
但是这也是行不通的。
没有关于如何实现它的完整教程。
有什么帮助吗?
注意:我正在尝试实施端点,因为我需要使用我的数据类型来集成我的系统。我尝试使用 Transformer 但因为这个失败了:Set a custom DataType in Apache Camel Processor
之前,我尝试过使用数据类型转换器,但因此失败了(标记为重复,因为人们懒得真正理解问题):Enforce type conversion on Rest consumer in Apache Camel
我已完整阅读“Apache Camel In Action,第二版”,但目前我无法继续我的项目,因为?
这是因为自定义组件必须通过@UriEndpoint
注解进行注解。
解决此问题的另一种方法:通过构造函数或通过在 MyEndpoint 中实现 createEndpointUri() 来设置 EndpointUri。
最简单的方法可能是将构造函数更改为:
public MyEndpoint(String uri, MyComponent myComponent) {
super(uri, myComponent);
}