328.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;
}
}和
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");328.5.1. 以上使用 XML DSL 的示例
以上示例可以在 XML DSL 中实施