329.5. 使用 JAXB 和 StAX 迭代集合
首先,我们假设您有 JAXB 对象。
例如,在 wrapper 对象中记录列表:
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "records")
public class Records {
@XmlElement(required = true)
protected List<Record> record;
public List<Record> getRecord() {
if (record == null) {
record = new ArrayList<Record>();
}
return record;
}
}
and
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "record", propOrder = { "key", "value" })
public class Record {
@XmlAttribute(required = true)
protected String key;
@XmlAttribute(required = true)
protected String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
然后,您可以获得一个 XML 文件来处理:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<records>
<record value="v0" key="0"/>
<record value="v1" key="1"/>
<record value="v2" key="2"/>
<record value="v3" key="3"/>
<record value="v4" key="4"/>
<record value="v5" key="5"/>
</record>
StAX 组件提供 StAXBuilder,可在通过 Camel Splitter 迭代 XML 元素时使用
from("file:target/in")
.split(stax(Record.class)).streaming()
.to("mock:records");
其中 stax 是 org.apache.camel.component.stax.StAXBuilder 上的静态方法,您可以在 Java 代码中静态导入。stax 构建器默认知道它所使用的 XMLReader。从 Camel 2.11.1 开始,您可以通过将布尔值参数设置为 false 来关闭此关闭,如下所示:
from("file:target/in")
.split(stax(Record.class, false)).streaming()
.to("mock:records");
329.5.1. 前面的带有 XML DSL 的示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以上示例可以在 XML DSL 中实现