有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用JAXB配置Moxy

我在代码集中使用JAXB的Moxy实现,并试图使用@XMLPath创建路径,但它似乎不起作用。我有一个基于Spring的项目,我创建了jaxb。/project/WEB/src/main/resources下的属性包含以下内容:

javax。xml。绑定上下文工厂=组织。日食坚持不懈jaxb。JAXBContextFactory

我的类放在/project/WEB/src/main/java下 我已经配置了pom。xml下载依赖关系。 坚持不懈莫西-->

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
     <version>2.4.0</version>
</dependency>

当我在WAS服务器上运行代码时,Moxy不会被识别,也不会创建路径。不确定我做错了什么

我甚至试着测试我的JAXBContext类,但我在控制台上得到的是:

JAXBContext jaxbContext = JAXBContext.newInstance(DocGenerator.class); 
System.out.println(jaxbContext.getClass());

班级通讯。太阳xml。绑定v2。运行时。JAXBContextImpl

有人能帮忙吗


共 (1) 个答案

  1. # 1 楼答案

    如果这对其他人有帮助,下面修复了我最近的“MOXy已配置但被忽略”问题

    我通过实现@XmlPathJavadoc中显示的第一个示例,在Java11(开放JDK)上测试了它

    按照说明here,我将所需的属性文件添加到包含我的域类(我想要序列化的带注释的bean)的包中

    我的IDE解决方案

    我最初忘记做的步骤是:

    我的IDE只将编译的.class文件复制到目标目录——它不复制任何其他文件(例如我的属性文件)

    如何解决这一问题取决于您的IDE。对我来说,这是对我的项目的ant构建配置的一个简单更改

    如果您使用的是Maven,那么pom.xml中的构建步骤如下所示:

    <build>  
        <resources>  
            <resource>  
                <directory>src/main/java</directory>  
                <excludes>  
                    <exclude>**/*.java</exclude>  
                </excludes>  
            </resource>  
        </resources>  
    </build>
    

    罐子的解决方案

    类似地,需要指示Maven将文件复制到JAR中的那个文件夹中。有多种方法可以做到这一点。有关一些答案,请参见this question

    资源目录

    将这个特定的配置文件放在resources目录中不起作用(至少,它对我不起作用)。MOXy的说明非常具体,需要严格遵守

    POM相关性

    在Java11中,模块Java。东南方。ee已被删除。见JEP-320。该模块包括JAXB(和JAX-WS)。要在Java11及更新版本中使用JAXB,需要将其作为单独的库添加到项目中

    有鉴于此,以下是我的POM依赖项:

            <dependency>
                <groupId>com.sun.activation</groupId>
                <artifactId>javax.activation</artifactId>
                <version>1.2.0</version>
            </dependency>
            
            <!  
                 Use 2.3.1 below to prevent "illegal 
                 reflective access operation" warnings.
             >
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>2.3.1</version>
            </dependency>
            
            <dependency>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-core</artifactId>
                <version>2.3.0.1</version>
            </dependency>
            
            <dependency>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-impl</artifactId>
                <version>2.3.1</version>
            </dependency>
            
            <dependency>
                <groupId>org.eclipse.persistence</groupId>
                <artifactId>eclipselink</artifactId>
                <version>2.7.6</version>
            </dependency>
    

    更新MOXy版本3的

    以上注释适用于MOXy版本2.7.6

    要使用版本3+,需要考虑到最近许多javax包被转移到雅加达。你可以阅读这个动作的背景here

    升级项目的步骤:

    1. jaxb.properties文件更改为以下内容:
    jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
    

    请注意,对于绑定上下文,此处对jakarta的引用发生了更改

    1. 将jaxb导入的所有更改为引用jakarta,而不是javax。例如,改变一下:
    import javax.xml.bind.JAXBContext; // old import
    

    为此:

    import jakarta.xml.bind.JAXBContext; // new import
    
    1. pom.xml中使用以下两个依赖项:
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    
    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    这两个依赖项足以支持此处给出的代码示例的更新版本:XPath Based Mapping using MOXy