2015-07-09 5 views
0

В моем приложении у меня есть xml-файлы, хранящиеся в папке, объявляющей мои маршруты. Я хотел бы загрузить все свои маршруты в загрузочную программу приложения и сохранить их в контексте моего верблюда. Другими словами, я хочу автоматически обнаруживать маршруты, хранящиеся в этих xml-файлах.Автоматическое обнаружение маршрутов Camel

Вот пример из файлов, содержащих маршруты

<?xml version="1.0" encoding="UTF-8"?> 
<routeContext id="myRoute" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="file:C:/LocalFTPServer" /> 
     <log message="Got a file!" loggingLevel="INFO" loggerRef="myLogger" /> 
     <choice> 
      <when> 
       <simple>${file:ext} == 'csv'</simple> 
       <log message="I'm going to email you!" loggingLevel="INFO" 
        loggerRef="myLogger" /> 
      </when> 
      <otherwise> 
       <log message="File extension wrong." loggingLevel="WARN" 
        loggerRef="myLogger" /> 
      </otherwise> 
     </choice> 
    </route> 
</routeContext> 

и вот мой контекст приложения

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> 

    <import resource="beans/beans.xml" /> 

    <camelContext xmlns="http://camel.apache.org/schema/spring"> 
    </camelContext> 

</beans> 
+0

Как насчет ''? –

+0

таким образом вы импортируете файлы, но вы не «регистрируете» маршруты, содержащиеся в них, в контексте верблюда. Я ищу что-то для этого. – dylaniato

ответ

0

Если вы хотите добавить маршруты на какое-то событие просто использовать context.addRouteDefinitions метод

Например:

public class ContextStartEventListener extends EventNotifierSupport implements ApplicationContextAware { 

     private ApplicationContext applicationContext; 

     @Override 
     public void setApplicationContext(ApplicationContext applicationContext) { 
      this.applicationContext = applicationContext; 
     } 

     @Override 
     public void notify(EventObject event) throws Exception { 
      if (event instanceof CamelContextStartedEvent) { 
       try { 
        CamelContextStartedEvent startedEvent = (CamelContextStartedEvent) event; 
        DefaultCamelContext context=(DefaultCamelContext)startedEvent.getContext(); 
        Resource[] xmlResources=applicationContext.getResources("classpath*:net/**/route.xml"); 
        for (int i=0;i<xmlResources.length;i++) { 
         InputStream is = xmlResources[i].getInputStream(); 
         RoutesDefinition routes = context.loadRoutesDefinition(is); 
         context.addRouteDefinitions(routes.getRoutes()); 
        }  
       } catch (Throwable ex) { 
        // do something on error 
       } 
      } 
     } 
... 
Смежные вопросы