Apache camel 定义输出类型

Apache camel 定义输出类型,apache-camel,Apache Camel,我在spring中使用camel xmljson组件将xml转换为json。 我的camel上下文中有下一个代码: <dataFormats> <xmljson id="xmljson" forceTopLevelObject="false"/> </dataFormats> <route id="LCG-Producer" autoStartup="false"> <from uri="activemq:to_in"/&g

我在spring中使用camel xmljson组件将xml转换为json。 我的camel上下文中有下一个代码:

<dataFormats>
    <xmljson id="xmljson" forceTopLevelObject="false"/>
</dataFormats>

<route id="LCG-Producer" autoStartup="false">
    <from uri="activemq:to_in"/>
    <marshal ref="xmljson"/>
    <to uri="activemq:to_out"/>
</route>
字段“entero1”作为字符串生成,它是一个整数,我的意思是,我需要该输出(不带“”):


有没有办法定义数据格式?

我已经检查了XmlJsonDataFormat的源代码,我想这是不可能的。 但是,您可以使用相同的序列化程序使您成为我们的处理器

例如:

(免责声明:代码没有效率,它只是给你一些想法)


我已经检查了XmlJsonDataFormat的源代码,我想这是不可能的。 但是,您可以使用相同的序列化程序使您成为我们的处理器

例如:

(免责声明:代码没有效率,它只是给你一些想法)


根据本文档,xmlserializer将所有数据视为字符串,除非在xml元素上指定了“type”属性,例如:

<example>
    <cadena1>aaaaaaa</cadena1>
    <entero1 type="number">1511</entero1>
</example>

AAAAAAAA
1511

根据本文档,xmlserializer将所有数据视为字符串,除非在xml元素上指定了“type”属性,例如:

<example>
    <cadena1>aaaaaaa</cadena1>
    <entero1 type="number">1511</entero1>
</example>

AAAAAAAA
1511
    {
       "cadena1": "aaaaaaa", 
       "entero1":1511
    }
                @Override
                public void process(Exchange exchange) throws Exception {
                    XMLSerializer serializer = new XMLSerializer();
                    JSON json=serializer.read(exchange.getIn().getBody(String.class));
                    StringWriter writer=new StringWriter();

                    JsonConfig jsonConfig=new JsonConfig(); 
                    jsonConfig.registerJsonValueProcessor("entero1", new JsonValueProcessor() {
                        @Override
                        public Object processArrayValue(Object value, JsonConfig jsonConfig) {
                            return new BigDecimal(value.toString());
                        }
                        @Override
                        public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
                            return new BigDecimal(value.toString());
                        }
                    });
                    JSONSerializer.toJSON(json, jsonConfig).write(writer);
                    writer.close();
                    exchange.getIn().setBody(writer.toString());
                }
<example>
    <cadena1>aaaaaaa</cadena1>
    <entero1 type="number">1511</entero1>
</example>