是否可以使用jaxb注释在解组后导航对象?

时间:2017-01-19 15:12:56

标签: java jaxb jaxb2 hyperjaxb

我有一个相当复杂的XML模式,我使用hyperjaxb3生成带有注释的pojo。有时候我有父对象,并且想要检查可能是8或9个孩子深的子对象的值。无论如何使用jaxb或其他工具来获取基于jaxb注释的特定类的子对象列表?

我可以编写一个递归函数来搜索所有子类的类实例,但这不太理想。任何建议将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

您不必编写代码来自行遍历对象树 - 已经有一些代码树(例如jdereg&#39; s java-util)和XmlRootElement将为您找到用public static void main(String[] args) throws JAXBException { JAXBContext jc = JAXBContext.newInstance(Foo.class); JAXBIntrospector is = jc.createJAXBIntrospector(); // Found objects List<Foo.Bar> bars = new ArrayList<>(); // Object name to look for QName barName = new QName("", "bar"); // Unmarshalled root object to introspect Foo target = new Foo(new Foo.Bar()); // Walk the object graph looking for "bar" elements Traverser.traverse(target, o -> { if (barName.equals(is.getElementName(o))) { bars.add((Foo.Bar) JAXBIntrospector.getValue(o)); } }); System.out.println(bars); } // // Some test objects // @XmlRootElement(name = "foo") public class Foo { private Bar bar; public Foo() { } public Foo(Bar bar) { this.bar = bar; } @XmlElement(name="bar") public Bar getBar() { return bar; } public void setBar(Bar bar) { this.bar = bar; } @XmlRootElement(name="bar") public static class Bar { String name = "kate"; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Bar{name='" + name + '\'' + '}'; } } } 注释的对象。如果你正在寻找其他注释,那么还需要做更多的工作,但并不多。

例如:

Array.prototype.find()