Jaxb 忽略MOXy@XmlPath

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

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

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

测试
10000
提前谢谢你的帮助 阿戈斯蒂诺

导入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(字符串[]args)抛出JAXBEException{ SZK=新的SZK(); k、 sourceAddress=“测试”; k、 sourcePort=10000; javax.xml.bind.JAXBContext jc=JAXBContext.newInstance(SZK.class); Marshaller m=jc.createMarshaller(); m、 setProperty(Marshaller.JAXB_格式化的_输出,true); m、 元帅(k,系统输出); } }
此问题最可能的原因是缺少指定应用作jaxb提供程序的
jaxb.properties
文件。
jaxb.properties
文件必须与域模型放在同一个包中,并包含以下条目:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
有关更多信息:


非常荣幸直接从“来源”得到回答:-。是的,是jaxb.properties文件丢失了。我对这些文件执行了更多的测试,以确认每个包可以有不同的提供者。直到我尝试用JAXBContext.newInstance(pkg1.C1.class,pkg2.C2.class)封送来自不同包的类时,才明白了。。。但这是一个相当高级的问题。如果您正在使用maven,那么检查您的目标/类是值得的。。。。属性文件的文件系统上。以防maven设置为不将文件复制到target@Derek这个评论应该被强调,我浪费了2天的时间,解决方案隐藏在这两行中。Maven只是将属性文件排除在目标中。确保maven编译后jaxb.properties仍然存在。给我一点时间。@B你好,谢谢你的提问。事实上,我也在尝试做一些类似的事情,但由于某些原因,它没有按预期工作。我也尝试过这个答案中提到的事情。我尝试了这种方法和作者博客中的示例,但是
JAXB编组
@XmlPath
中仍然不能像预期的那样工作。似乎使用和不使用
@XmlPath
生成的XML是相同的。你能看一下这个例子并给出你的答案吗:嗨,谢谢你提出这个问题。事实上,我也在尝试做一些类似的事情,但由于某些原因,它没有按预期工作。我也尝试过这个答案中提到的事情。我尝试了这种方法和作者博客中的示例,但是
JAXB编组
@XmlPath
中仍然不能像预期的那样工作。似乎使用和不使用
@XmlPath
生成的XML是相同的。请您研究一下这个例子并给出您的答案:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory