给定以下XML结构:
<root>
<data>x</data>
<details>
<some_other_element>...</some_other_element>
<collection>
<element><a>1</a></element>
<element><a>2</a></element>
<element><a>3</a></element>
<collection>
</details>
</root>我如何使用MOXy将其解组为一个基本扁平的POJO?我尝试了这种方法(为简洁起见,省略了getter和setter):
@XmlRootElement(name = "root")
class Root {
@XmlElement
private String data;
@XmlElement
@XmlPath("details/some_other_element")
private String someOtherElement;
@XmlPath("details")
@XmlElementWrapper(name = "collection")
@XmlElement(name = "element")
private Collection<Element> elements;
}
class Element {
@XmlElement
private String a;
}不幸的是,这只会将一个未初始化的元素添加到elements集合中。我希望避免声明Details类(这确实可以工作),因为这会破坏<details>下面元素的其他@XmlPath映射。
我已经验证了MOXy已实际加载(如jaxb.properties中声明的那样)。
有什么想法吗?
发布于 2012-06-22 17:53:51
尝试将包装标记和元素添加到@XmlPath,而不是使用@XmlElementWrapper
@XmlPath("details/collection/element")
@XmlElement(name = "element")
private Collection<Element> elements;我认为您甚至可以保留@XmlElementWrapper注释,以备将来更改jaxb提供程序时使用。
以下是您的用例所需的最小注释:
package forum11153599;
import java.util.Collection;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement
class Root {
@XmlElement
private String data;
@XmlPath("details/some_other_element/text()")
private String someOtherElement;
@XmlPath("details/collection/element")
private Collection<Element> elements;
}https://stackoverflow.com/questions/11153599
复制相似问题