MOXy @XmlPath 被忽略

Posted

技术标签:

【中文标题】MOXy @XmlPath 被忽略【英文标题】:MOXy @XmlPath ignored 【发布时间】:2011-08-22 09:05:20 【问题描述】:

我有一个非常简单的类,它有两个字段,String sourceAddress 和 int port。 我希望它们映射到源/地址和源/端口节点而不是 jaxb 默认的 sourceAddress 和 sourcePort。 所以我使用 MOXy @XmlPath 注释。 问题是注释被忽略了,我得到了“jaxb default”xml文件:

<szk>
    <sourceAddress>test</sourceAddress>
    <sourcePort>10000</sourcePort>
</sz>

提前感谢您的帮助 阿戈斯蒂诺

导入 javax.xml.bind.*; 导入 javax.xml.bind.annotation.*; 导入 org.eclipse.persistence.jaxb.JAXBContext; 导入 org.eclipse.persistence.oxm.annotations.XmlPath; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) 公共课 SZK @XmlPath("源/地址") 私有字符串源地址; @XmlPath("源/端口") 私有 int 源端口; 公共静态 void main (String [] args) 抛出 JAXBException SZK k = 新 SZK(); k.sourceAddress = "测试"; k.sourcePort = 10000; javax.xml.bind.JAXBContext jc = JAXBContext.newInstance(SZK.class); 编组器 m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); m.marshal(k, System.out);

【问题讨论】:

您好,感谢您提出这个问题。实际上,我也在尝试做类似的事情,但由于某种原因,它没有按预期工作。我也尝试了这个答案中提到的东西。我尝试了这种方法和作者博客中的示例,但JAXB Marshalling 仍然无法按预期使用@XmlPath。似乎使用和不使用 @XmlPath 生成的 XML 是相同的。请您查看此示例并提供您的答案:***.com/questions/67500565/… 【参考方案1】:

此问题的最可能原因是您缺少 jaxb.properties 文件以指定应将 EclipseLink MOXy 用作 JAXB 提供程序。 jaxb.properties 文件必须与您的域模型放在同一个包中,并包含以下条目:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

更多信息:

http://bdoughan.blogspot.com/2011/05/specifying-eclipselink-moxy-as-your.html http://bdoughan.blogspot.com/2010/09/xpath-based-mapping-geocode-example.html http://bdoughan.blogspot.com/2011/03/map-to-element-based-on-attribute-value.html

【讨论】:

很荣幸直接从“来源”回答:-)。是的,缺少 jaxb.properties 文件。我对这些文件进行了更多测试,以确认每个包可以有不同的提供者。好的,直到我尝试使用 JAXBContext.newInstance(pkg1.C1.class, pkg2.C2.class) 编组来自不同包的类...但这是一个非常高级的问题。 如果您使用的是 maven,则值得在文件系统上检查您的目标/类.... 以获取属性文件。以防万一 maven 设置为不将文件复制到目标中 @Derek 这个评论应该被突出显示,我浪费了 2 天的时间,解决方案隐藏在这两行中。 Maven 只是简单地排除了目标中的属性文件。确保 jaxb.properties 在 maven 编译后仍然存在。 关于 Derek 的注释:就我而言,它不仅仅是 Maven,它也是我的 IDE。 facepalm 我的时刻。 @bdoughan 您好,感谢您提出这个问题。实际上,我也在尝试做类似的事情,但由于某种原因,它没有按预期工作。我也尝试了这个答案中提到的东西。我尝试了这种方法和作者博客中的示例,但JAXB Marshalling 仍然无法按预期使用@XmlPath。似乎使用和不使用 @XmlPath 生成的 XML 是相同的。请你看看这个例子并提供你的答案:***.com/questions/67500565/…

以上是关于MOXy @XmlPath 被忽略的主要内容,如果未能解决你的问题,请参考以下文章

SVN添加忽略后,怎么解除被忽略的文件

cppcheck -i 开关(忽略)被忽略

SVN添加忽略后,怎么解除被忽略的文件

G++ 忽略 _Pragma 诊断被忽略

一个经常被忽略的c语言问题

为啥过滤统计信息被忽略