Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在process()中启动camel端点_Java_Apache_Apache Camel - Fatal编程技术网

Java 是否可以在process()中启动camel端点

Java 是否可以在process()中启动camel端点,java,apache,apache-camel,Java,Apache,Apache Camel,正如标题所说:是否可以在路由(-builder)的流程函数中启动camel端点?我是apache camel的新手,但已经做了一些项目 情况如下: 我正在使用ApacheCamel和西门子Teamcenter RAC来执行一个SavedQuery。结果是一个ModelObject[],其中包含找到的元素 对于这些元素中的每一个,我现在需要启动另一个端点,执行第二个搜索查询。我想到了这样的事情: //within .process() for (ModelObject ob : arrModelO

正如标题所说:是否可以在路由(-builder)的流程函数中启动camel端点?我是apache camel的新手,但已经做了一些项目

情况如下: 我正在使用ApacheCamel和西门子Teamcenter RAC来执行一个SavedQuery。结果是一个ModelObject[],其中包含找到的元素

对于这些元素中的每一个,我现在需要启动另一个端点,执行第二个搜索查询。我想到了这样的事情:

//within .process()
for (ModelObject ob : arrModelObjects) {
    // something like:  .to("direct:searchnew")
}
但我不能在处理器中引用外部函数“.to()”。是否有变通方法或解决方案,或者我的想法是错误的

   class MyProcessor implements Processor{

    private ProducerTemplate producerTemplate;
      @Override
      public void process(Exchange exchange) throws Exception {
         for (ModelObject ob : arrModelObjects) {
               producerTemplate.send("direct:searchnew",exchange);    
       }}
    }
将producerTemplate添加到上下文


将producerTemplate添加到CamelContext。

正如@Rathna提到的,您可以使用producerTemplate

您可以根据您的上下文创建新的生产者模板,您可以从exchange获得该模板,如下所示:

public class MyProcessor implements Processor{

@Override
public void process(Exchange exchange) throws Exception {
    ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();

    ModelObject[] arrModelObjects = (ModelObject[]) exchange.getIn().getBody();

    for (ModelObject ob : arrModelObjects) {
        producerTemplate.sendBody("direct:someEndpoint", ob);
    }
}

}

正如@Rathna提到的,您可以使用producerTemplate

您可以根据您的上下文创建新的生产者模板,您可以从exchange获得该模板,如下所示:

public class MyProcessor implements Processor{

@Override
public void process(Exchange exchange) throws Exception {
    ProducerTemplate producerTemplate = exchange.getContext().createProducerTemplate();

    ModelObject[] arrModelObjects = (ModelObject[]) exchange.getIn().getBody();

    for (ModelObject ob : arrModelObjects) {
        producerTemplate.sendBody("direct:someEndpoint", ob);
    }
}

}

如果需要进行第二次查询并将结果包含在ModelObjecta中,请查看ProducerTemplater。需要将每个对象“发送”到端点,因此我首先查看producer模板。Content enricher似乎是一种错误的方法。如果需要进行第二次查询并将结果包含在ModelObjecta中,请查看ProducerTemplater。需要将每个对象“发送”到端点,因此我将首先查看producer模板。Content enricher似乎是错误的方法将其添加到您的配置中,您在camel上下文中定义了路由生成器i'n不使用camel上下文,我有一个java主类,我在其中运行org.apache.camel.main.main类将其添加到您的配置中,如果您在camel上下文中定义了路由生成器,而不是使用camel上下文,那么我有一个java主类,在其中运行org.apache.camel.main.main类