我在我的代码集中使用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 -->
<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());com.sun.xml.bind.v2.runtime.JAXBContextImpl类
有人能帮帮忙吗?
发布于 2020-02-19 00:36:24
如果这对其他人有帮助,下面的代码修复了我最近的"MOXy已配置但被忽略“的问题。
通过实现@XmlPath Javadoc中显示的第一个示例,我在Java11 (Open JDK)上对其进行了测试。
按照here的说明,我将所需的属性文件添加到包含域类(我想要序列化的带注释的bean)的包中。
针对我的IDE的解决方案
我最初忘记做的一步是:
我的集成开发环境只将已编译的.class文件复制到目标目录-它不复制任何其他文件(例如我的属性文件)。
是啊。
如何修复它取决于您的IDE。对我来说,这只是对我的项目的ant构建配置的一个简单更改。
如果您使用的是Maven,那么pom.xml中的构建步骤如下所示:
<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依赖项,以供记录:
<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的背景。
升级项目的步骤:
jaxb.properties文件更改为以下内容:jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory请注意,对于绑定上下文,此处更改了对jakarta的引用。
jakarta而不是javax。因此,例如,更改以下内容:import javax.xml.bind.JAXBContext; // old import要这样做:
import jakarta.xml.bind.JAXBContext; // new import在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。
https://stackoverflow.com/questions/39388961
复制相似问题