Camel 4.0中从XML创建Route/RouteDefinition的迁移方案咨询
Camel 3.20 到 4.0 XML路由加载代码迁移方案
原XML路由格式
<routes xmlns="http://camel.apache.org/schema/spring" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-3.20.2.xsd"> <route id="..."> ...... </route> </routes>
原Camel 3.20实现代码
String xmlContent = myBean.getXMLFileContent();// 假设该字符串内容为上述XML格式 // 可接受将字符串转为java.io.File,也愿意采用Camel官方推荐的新方法 try (InputStream is = new ByteArrayInputStream(xmlContent.getBytes())) { XMLRoutesDefinitionLoader loader = extendedCamelContext.getXMLRoutesDefinitionLoader(); RoutesDefinition routesDefinition = (RoutesDefinition) loader.loadRoutesDefinition(camelContext, is); modelCamelContext.addRouteDefinitions(routesDefinition.getRoutes()); }
迁移到Camel 4.0的实现方案
1. 依赖调整
Camel 4.0中,camel-xml-io依赖已被camel-xml-io-dsl替代,需更新依赖:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-xml-io-dsl</artifactId> <version>${camel.version}</version> </dependency>
2. 代码修改(官方推荐方式)
Camel 4.0中XMLRoutesDefinitionLoader已标记为过时,官方推荐使用XmlRoutesLoader加载XML路由定义,API调用方式同步调整:
String xmlContent = myBean.getXMLFileContent(); try (InputStream is = new ByteArrayInputStream(xmlContent.getBytes())) { // 获取XmlRoutesLoader实例 XmlRoutesLoader loader = camelContext.getExtension(XmlRoutesLoader.class); // 加载路由定义 List<RouteDefinition> routeDefinitions = loader.loadRoutes(is); // 添加到CamelContext camelContext.addRouteDefinitions(routeDefinitions); }
3. 额外注意事项
- XML中的schema版本需同步更新为Camel 4.x对应版本,例如将
camel-spring-3.20.2.xsd替换为camel-spring-4.x.x.xsd(具体版本号与使用的Camel 4.x版本一致) - 若需从文件加载,可直接调用
loader.loadRoutes(new File("path/to/routes.xml")),无需手动转换为InputStream
内容的提问来源于stack exchange,提问作者Pavlos Apostolatos
相关产品推荐
相关产品推荐

