如何在没有 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>
2 回答
慕容708150
TA贡献1831条经验 获得超4个赞
Camel 使用 JAXB 来编组和解组 XML。XML 模型在org.apache.camel.model包中定义。您可以尝试以下方法:
JAXBContext jaxbContext = JAXBContext.newInstance(SetHeaderDefinition.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
SetHeaderDefinition setHeaderDefinition = (SetHeaderDefinition) jaxbUnmarshaller.unmarshal(file);
一只斗牛犬
TA贡献1784条经验 获得超2个赞
CamelContext 类具有允许加载 xml 文件的函数 loadRoutesDefinition。
XML 文件应具有如下结构:
<routes xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri.....
</route>
</routes>
添加回答
举报
0/150
提交
取消