当我运行您的示例时,一切正常。由于您的实际模型可能具有get /
set方法,因此您需要确保将其添加
@XmlAccessorType(XmlAccessType.FIELD)到类中,否则MOXy(或任何其他JAXB
impl)还将相应的属性视为已映射(请参见: http://blog.bdoughan)。 com / 2011/06 / using-jaxbs-
xmlaccessortype-to.html)。
import java.util.List;import javax.xml.bind.annotation.*;import org.eclipse.persistence.oxm.annotations.XmlPath;@XmlRootElement(name = "root")@XmlAccessorType(XmlAccessType.FIELD)public class Root { @XmlPath("resource/information/date/text()") private String date; @XmlPath("resource/information/name/text()") private String name; @XmlPath("resource/elements/element") private List<Element> elements;}您还需要确保具有
jaxb.properties与域模型相同的文件包,并带有以下条目,以将MOXy指定为JAXB提供程序(请参阅:http ://blog.bdoughan.com/2011/05/specifying-
eclipselink- moxy-as-your.html)。
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
想要查询更多的信息
- http://blog.bdoughan.com/2010/07/xpath-based-mapping.html
更新#1
当您的文档经过名称空间限定时,
@XmlPath注释需要考虑在内。可以根据
@XmlSchema注释限定路径中的节点。
包装信息
在您的
package-info类中,前缀
s被分配给名称空间URI
http://www.example.eu/test。
@XmlSchema( namespace = "http://www.example.eu/test", attributeFormDefault = XmlNsForm.QUALIFIED, elementFormDefault = XmlNsForm.QUALIFIED, xmlns = { @XmlNs( prefix = "s", namespaceURI = "http://www.example.eu/test")}, location = "http://www.example.eu/test ResourceSchema.xsd")package se.example.mavenproject1;import javax.xml.bind.annotation.XmlNs;import javax.xml.bind.annotation.XmlNsForm;import javax.xml.bind.annotation.XmlSchema;根
这意味着符合
http://www.example.eu/test名称空间的节点应
s在
@XmlPath注释中具有前缀。
import java.util.List;import javax.xml.bind.annotation.*;import org.eclipse.persistence.oxm.annotations.XmlPath;@XmlRootElement(name = "root")@XmlAccessorType(XmlAccessType.FIELD)public class Root { @XmlPath("s:resource/s:information/s:date/text()") private String date; @XmlPath("s:resource/s:information/s:name/text()") private String name; @XmlPath("s:resource/s:elements/s:element") private List<Element> elements;}更新#2
因此,似乎在将路径映射到复杂对象时,需要在@XmlPath中指定名称空间,但是在将路径映射到简单对象(如String或整数)时可以跳过命名空间。
这是一个错误。您应该
@XmlPath像处理复杂对象一样,对命名空间限定简单对象的权限(请参阅UPDATE#1)。正确的映射今天有效,我们将修复以下错误,以便正确的映射行为正确。您可以使用下面的链接跟踪我们在此问题上的进展:
- http://bugs.eclipse.org/412311



