【问题标题】:Where to include jaxb.properties file?在哪里包含 jaxb.properties 文件?
【发布时间】:2025-12-26 02:10:06
【问题描述】:

我有 REST (Jersey) Web 服务,它使用了一些编组/解组到 XML 的数据对象。数据对象位于 web 服务战争所依赖的单独项目/jar 中。

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

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

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

【问题讨论】:

    标签: properties jaxb eclipselink moxy


    【解决方案1】:

    如果你不想或者不能使用 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代码中显式指定的,而不是在配置文件中隐式指定的。

    【讨论】:

    • 谢谢,帮了大忙。
    • 谢谢。它帮助解决了我的一个关键问题。
    • 我更喜欢这个解决方案而不是 jax.properties 文件,它在测试运行期间被 maven 忽略(至少对我而言)。 jc = JAXBContextFactory.createContext("com.mymodels", null) 对我有用。
    • 这不仅比这个问题的其他答案要简单得多,也比许多其他问题要简单得多。非常感谢!
    【解决方案2】:

    您将 jaxb.properties 文件与模型类打包在一起。 GlassFish 尚不包含 MOXy 捆绑包,但您可以轻松添加它。查看我的博客了解更多信息:

    【讨论】:

    • 如果我的模型类分布在多个目录中怎么办?我需要在每个文件夹中放置一个jaxb.properties 文件吗?