Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用ApacheCamelBindy将两个xml标记合并为一个xml_Java_Xml_Apache Camel_Camel Http - Fatal编程技术网

Java 如何使用ApacheCamelBindy将两个xml标记合并为一个xml

Java 如何使用ApacheCamelBindy将两个xml标记合并为一个xml,java,xml,apache-camel,camel-http,Java,Xml,Apache Camel,Camel Http,我的问题是在平面文件中有两个不同的位置,用“|”分隔字符串。位置2和3参见说明。我想生成两个描述都附加到一个描述的xml,并返回一个带有两个描述的DESC标记 输入源: UN|2.1 |AEROSOLS <TEST> <STATE>UN</STATE> <DESC>2.1 AEROSOLS</DESC> </TEST> <TEST> <STATE>UN</STATE>

我的问题是在平面文件中有两个不同的位置,用“|”分隔字符串。位置2和3参见说明。我想生成两个描述都附加到一个描述的xml,并返回一个带有两个描述的DESC标记

输入源:

UN|2.1  |AEROSOLS
<TEST>
<STATE>UN</STATE>
<DESC>2.1 AEROSOLS</DESC>
</TEST>
    <TEST>
    <STATE>UN</STATE>
    <DESC_ONE>2.1 AEROSOLS</DESC_ONE>
    <DESC_TWO>AEROSOLS<DESC_TWO>
    </TEST>
预期输出:

UN|2.1  |AEROSOLS
<TEST>
<STATE>UN</STATE>
<DESC>2.1 AEROSOLS</DESC>
</TEST>
    <TEST>
    <STATE>UN</STATE>
    <DESC_ONE>2.1 AEROSOLS</DESC_ONE>
    <DESC_TWO>AEROSOLS<DESC_TWO>
    </TEST>
Converter.java

@Data
public class TEST {


    @DataField(pos = 1, name = "STATE", required = true)
    private String STATE;

    @DataField(pos = 2, name = "DESC",required = true)
    private String DESC_ONE;

    @DataField(pos = 3, name = "DESC",required = true)
    private String DESC_TWO;


}
                            from(SOURCE_INPUT_PATH).
                            log("Received input from file and body is ${body}").
                            unmarshal(bindyBeanConfig.bindyCsvDataFormat3280()).
                            process(new Processor()  {
                                @Override
                                public void process(Exchange exchange) throws Exception {

                                    TEST test = exchange.getIn().getBody(TEST.class);
                                    DESC_ONE descOne = test.getTEST();
                                    DESC_TWO descTwo = descOne.getDESC_ONE();

                                    String description = descOne.getDESC_ONE() + descTwo.getDESC_TWO();

                                    descOne.set_DESCONE(description);

                                    exchange.getIn().setBody(descTwo);

                                }
                            }).

我对ApacheCamel不太了解,但是在调用
exchange.getIn().setBody(descTwo)之前,您可以在
TEST
中设置另一个
DataField
,比如
DESC
,而不是在
Converter.java
中设置
DESC ONE
您应该将
DESC\u ONE
DESC\u TWO
设置为
null

我对
apche camel
知之甚少,但是您可以在
测试中有另一个数据字段,比如
DESC
,您可以在
Converter.java
中设置
DESC code>DESC ONE
,而不是
DESC ONE
,调用
exchange.getIn().setBody(descTwo)之前的进一步操作
您应该将
DESC_ONE
DESC_TWO
设置为
null
@BHAWANISINGH。我根据您的建议进行了更改。效果很好。谢谢请将其更新为答案。