在没有 Spring 的情况下从 XML 片段实例化 Camel 组件

如何在没有 Spring 的情况下从 XML 片段实例化 Camel 组件?


说,我有一个片段,是这样的:


<dataFormats>

    <json id="jack" library="Jackson" prettyPrint="true"/>

....

</dataFormats>

,我想对其进行解析并有效地为我返回,因为


JsonDataFormat jack = new JsonDataFormat(JsonLibrary.Jackson);

jack.setPrettyPrint(true);

甚至是这样的事情,我希望能够从以下位置实例化处理器:


<setHeader headerName="inputRegistryHandler">

   <simple>${header.CamelFileNameOnly}</simple>

</setHeader>


<mvel>request.headers.foo == 'bar'</mvel>

等等


希望在 Camel 3 中不会放弃 XML 支持?


解决方案


按照下面的@Sergei I. 建议,我写了如下内容


JAXBContext jc = JAXBContext.newInstance("org.apache.camel.model:org.apache.camel.model.language");

Unmarshaller unmarshal = jc.createUnmarshaller();

ProcessorDefinition pd = (ProcessorDefinition) unmarshal.unmarshal(serviceDefinitionElement);

rc = new DefaultRouteContext(_camelContext);

Processor processor = pd.createProcessor(rc);

_camelContext.addService(processor, true);

它吃了一个 DOM 元素,其中包含


<camel:setBody>

    <camel:simple>mike check one two</camel:simple>

</camel:setBody>

像魅力一样,创造一个功能强大的处理器


可能我需要添加更多的 java 包才能解析更多类型的 Camel XML 片段


更新 我必须添加_camelContext.addService(processor, true);到上面的解决方案中。这个神奇的东西将所有 Camel Context bean 加载到处理器中,这使我们能够省略一些配置。例如,这将在ObjectMapper没有我们特别提及的情况下添加到 Jackson 数据格式,并且prettyPrint标志开始被resected:


<camel:unmarshal>

    <camel:jacksonxml unmarshalTypeName="java.util.Map"/>

</camel:unmarshal>

<camel:marshal>

    <camel:json library="Jackson" prettyPrint="true"/>

</camel:marshal>


呼啦一阵风
浏览 107回答 2
2回答

慕容708150

Camel 使用 JAXB 来编组和解组 XML。XML 模型在org.apache.camel.model包中定义。您可以尝试以下方法:JAXBContext jaxbContext = JAXBContext.newInstance(SetHeaderDefinition.class);Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();SetHeaderDefinition setHeaderDefinition = (SetHeaderDefinition) jaxbUnmarshaller.unmarshal(file);

一只斗牛犬

CamelContext 类具有允许加载 xml 文件的函数 loadRoutesDefinition。XML 文件应具有如下结构:<routes xmlns="http://camel.apache.org/schema/spring">&nbsp; <route>&nbsp; &nbsp;<from uri.....&nbsp; </route></routes>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java