首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用JAXB配置Moxy

无法使用JAXB配置Moxy
EN

Stack Overflow用户
提问于 2016-09-08 18:48:16
回答 1查看 612关注 0票数 5

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

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

我的类放在/project/WEB/src/main/java下,我已经将我的pom.xml配置为下载依赖项。persistence.moxy -->

代码语言:javascript
复制
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
     <version>2.4.0</version>
</dependency>

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

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

代码语言:javascript
复制
JAXBContext jaxbContext = JAXBContext.newInstance(DocGenerator.class); 
System.out.println(jaxbContext.getClass());

com.sun.xml.bind.v2.runtime.JAXBContextImpl类

有人能帮帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2020-02-19 00:36:24

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

通过实现@XmlPath Javadoc中显示的第一个示例,我在Java11 (Open JDK)上对其进行了测试。

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

针对我的IDE的解决方案

我最初忘记做的一步是:

我的集成开发环境只将已编译的.class文件复制到目标目录-它不复制任何其他文件(例如我的属性文件)。

是啊。

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

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

代码语言:javascript
复制
<build>  
    <resources>  
        <resource>  
            <directory>src/main/java</directory>  
            <excludes>  
                <exclude>**/*.java</exclude>  
            </excludes>  
        </resource>  
    </resources>  
</build>

JAR的解决方案

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

资源目录

将这个特定的配置文件放到一个resources目录中,不能工作(至少,它不能工作在我身上)。MOXy的说明是非常具体的-并且需要严格遵循。

POM依赖关系

在Java11中,模块java.se.ee已被删除。参见JEP-320。此模块包括JAXB (和JAX-WS)。要在Java 11和更高版本中使用JAXB,需要将其作为一个单独的库添加到项目中。

考虑到这一点,以下是我的POM依赖项,以供记录:

代码语言:javascript
复制
        <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包传输到雅加达的情况。你可以阅读这个move here的背景。

升级项目的步骤:

  1. jaxb.properties文件更改为以下内容:

代码语言:javascript
复制
jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

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

  1. 更改您的jaxb导入的所有,以引用jakarta而不是javax。因此,例如,更改以下内容:

代码语言:javascript
复制
import javax.xml.bind.JAXBContext; // old import

要这样做:

代码语言:javascript
复制
import jakarta.xml.bind.JAXBContext; // new import

pom.xml中,

  1. 使用以下两个依赖项

代码语言:javascript
复制
<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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39388961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档