java - 为多个 Java 包指定 MOXy 运行时

标签 java jaxb eclipselink moxy

除了放置 jaxb.properties 之外,对于分布在多个 Java 包中的域类,有没有办法将 MOXy 指定为我的 JAXB 实现?进入每一个包裹?

最佳答案

指定EclipseLink MOXy作为 JAXB 提供者,您需要将 jaxb.properties 放入域对象的其中一个包中,传入 以引导 JAXBContext。例如,如果您的 JAXBContext 将基于以下 2 个类:

  • example.foo.Foo
  • 例子.bar.Bar

example.foo.Foo

package example.foo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

import example.bar.Bar;

@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {

    private Bar bar;

}

example.bar.Bar

package example.bar;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

import example.foo.Foo;

@XmlAccessorType(XmlAccessType.FIELD)
public class Bar {

    private Foo foo;

}

example/foo/jaxb.properties

为了指定应该使用 JAXB 的 MOXy 实现,我们将在与 Foo 类相同的包中放置一个包含以下条目的 jaxb.properties 文件。

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

演示

由于 Foo 和 Bar 类相互引用,最终 JAXBContext 将包含关于它们的元数据,但根据我们创建 JAXBContext 的方式,提供者可能会有所不同。

package example;

import javax.xml.bind.JAXBContext;
import example.foo.Foo;
import example.bar.Bar;

public class Demo {

    public static void main(String[] args) throws Exception{
        System.out.println(JAXBContext.newInstance(Foo.class).getClass());
        System.out.println(JAXBContext.newInstance(Bar.class).getClass());
        System.out.println(JAXBContext.newInstance(Foo.class, Bar.class).getClass());
    }

}

运行上面的代码会产生:

class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
class org.eclipse.persistence.jaxb.JAXBContext

关于java - 为多个 Java 包指定 MOXy 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862896/

相关文章:

java - Maven JAXB 插件中出现 "Unable to create directory"错误,但仅一次

java - 如何从包含第三方库使用的自定义注释的 XML/XSD 动态创建 Java 对象

mysql - 为什么 EclipseLink 's auto commit doesn' 不能与 MySQL 一起使用?

java - 如果我们有视频 URL,如何检查视频是否正在播放?

Java If/else 字符变化

java - 如何将处理程序注册到使用 XmlAdapter 的 JAXB 注释类,以便向 REST 资源客户端发送错误消息?

jakarta-ee - 从实体生成表 - JPA

java - Spring Boot JPA - ManyToOne关系导致额外的sql

java - Android - 光标找不到列

java - Mac 上的 JFileChooser 不返回文件