2015-04-29 3 views
2

Я хочу написать маршрут Camel, который читает все xml-файлы в определенном каталоге, а затем вызывает метод Java класса класса, который реализует Processor, чтобы что-то сделать, и распечатать результат на экране.Как создать маршрут верблюда, который ссылается на определенный метод Java?

Например, класс Java называется ScriptProcessor, и у него есть метод обработки:

public class ScriptProcessor implements Processor{ 

    final Script script ; 


    public ScriptProcessor(Script script){ 
     this.script = script; 
    } 


    @Override 
    public void process(Exchange exchange) throws Exception { 
     //do something ... 

    } 

} 

Таким образом, в настоящее время у меня есть контекст верблюдах с маршрутом, как это:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
     <route> 
     <from uri="file:?noop=true"/> 
     <to uri="mock:result"/> 
     </route> 
    </camelContext> 

Я полагаю что все xml-файлы находятся в одной и той же папке файла с определением контекста Camel («от» тега), и я использую элемент mock для указания адресата маршрута. Я не знаю, как вызвать метод процесса класса ScriptProcessor внутрь, что маршрут Camel. Нужен тег «process» или что-то подобное? Может кто-нибудь мне помочь?

+0

Проверьте документ на [процессоре] (http://camel.apache.org/processor.html). Если вы хотите немного более гибко взглянуть на [bean binding] (http://camel.apache.org/bean-binding.html). – Ralf

+0

@ Ralf Спасибо за ответ. Да, я прочитал документацию о перекрестке процессоров и бобов. Но теперь моя проблема заключается в определении маршрута в XML-файле, а не в нотации Java DSL. Следуя определению в java об использовании компонента, я вставил элемент bean в определение маршрута в XML-файле, но я не могу разрешать ошибки. –

+0

Не могли бы вы обновить свой вопрос с помощью определения маршрута и ошибки, которую вы получаете? В общем, в Spring DSL есть тег с тем же именем для метода в DSL Java. Поэтому, если есть метод 'process (..)', то есть тег '', который выполняет ту же работу. Это очень помогает использовать XML-редактор, который обеспечивает завершение кода, если предоставляется XML-схема (например, редактор XML Eclipse). – Ralf

ответ

0

Я решил таким образом. Я создаю файл XML с определением маршрута:

<route id="scriptProcessor"> 
    <from uri="file:/C:/Users/milioli/Documents/NetBeansProjects/camel-rule-engines-processor/src/main/resources/samples/?noop=true"/> 
    <bean beanType="com.mycompany.processor.ScriptProcessor" method="process"/> 
    <to uri="mock:result"/> 
    <onCompletion> 
     <bean beanType="com.mycompany.processor.context.handler.ShutdownContextProcessor" method="process"/> 
    </onCompletion> 
</route> 

Затем в методе процесса я делаю операции, которые мне нужны. Определение маршрута таким образом не позволяет мне загрузить определение, используя описанный метод here.

1

Вы можете использовать процессор таким образом:

<bean id="scriptProcessor" class="com.my.app.ScriptProcessor"/> 

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
    <from uri="file:?noop=true"/> 
    <process ref="scriptProcessor" /> 
    <to uri="mock:result"/> 
    </route> 
</camelContext> 

Или использовать верблюд боб интеграции: контекст

public class SomeBean { 

    public void someMethod(Exchange exchange) throws Exception { 
     //do something 
    } 
} 

верблюд:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
    <from uri="file:?noop=true"/> 
    <bean ref="someBean" method="someMethod"/> 
    <to uri="mock:result"/> 
    </route> 
</camelContext> 

Для получения более подробной информации см http://camel.apache.org/bean-language.html

Смежные вопросы