在哪里包含jaxb.properties文件?

25

我有一个使用REST (Jersey)框架构建的Web服务,它使用某些数据对象进行XML的编组/解组。这些数据对象在一个独立的项目/库中,并且Web服务war文件依赖于它。

我正在使用MOXy作为我的JAXB实现,因为我部署到Glassfish时它已经包含在内。我知道需要一个jaxb.properties文件来将JAXB实现设置为MOXy并包含以下条目:

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

问题是,jaxb.properties文件应该包含在数据对象jar中还是Web服务war中,还是两者都包含?

2个回答

30

如果您不想或无法使用jaxb.properties文件(例如您有许多包,模型位于外部jar中,您只想使用Java而没有配置文件...),则可以直接指定JaxbContextFactory:

不要使用以下方式创建上下文:

JAXBContext jaxbContext = JAXBContext.newInstance(new Class[]{Person.class, ObjectFactory.class}, properties);

但是,相反地,请指定要使用的工厂:

JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Person.class, ObjectFactory.class}, properties);

工厂所在地:

import org.eclipse.persistence.jaxb.JAXBContextFactory;

它完全相同,但在Java代码中明确指定而不是隐式地在配置文件中指定。


谢谢,它帮了很大的忙。 - eugene82
谢谢。它帮助我解决了一个关键问题。 - santhoshkumar
1
我更喜欢这个解决方案,而不是在测试运行期间被Maven忽略的jax.properties文件(至少对我来说是这样)。jc = JAXBContextFactory.createContext("com.mymodels", null) 对我很有用。 - Nodoze
这比其他答案,甚至许多其他问题都要简单得多。非常感谢! - Sarp Başaraner

12

11
如果我的模型类分布在多个目录中,我是否需要在每个文件夹中放置一个 jaxb.properties 文件? - George
2
是的:"JAXB提供程序必须在每个包中生成一个jaxb.properties文件,其中包含从模式派生的类。" - bebbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接