栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Jaxb / MOXy中使用@XmlPath映射复杂类型

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Jaxb / MOXy中使用@XmlPath映射复杂类型

当我运行您的示例时,一切正常。由于您的实际模型可能具有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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号