使用JAXB处理丢失的节点
处理JAXB中缺失节点的问题
在JAXB(JSR-222)的实现中,如果节点不存在,set方法不会被调用。您可以在set方法中加入逻辑来跟踪它是否被调用。
public class Foo { private String bar; private boolean barSet = false; public String getBar() { return bar; } public void setBar(String bar) { this.bar = bar; this.barSet = true; } }
更新
JAXB还将空节点视为具有空字符串值。
Java模型
import javax.xml.bind.annotation.XmlRootElement; public class Root { private String foo; private String bar; public String getFoo() { return foo; } public void setFoo(String foo) { this.foo = foo; } public String getBar() { return bar; } public void setBar(String bar) { this.bar = bar; } }
演示
import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Root.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum15839276/input.xml"); Root root = (Root) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(root, System.out); } }
input.xml/Output
我需要处理BigInteger数据类型和集合的相同情况,但对于BigInteger,布尔标志始终为false。