
本文旨在帮助开发者解决在使用 Maven CXF 插件从 WSDL 文件生成 Java 代码时遇到的 javax/xml/bind/annotation/adapters/HexBinaryAdapter 缺失错误。文章将提供一个可行的 Maven 配置示例,并详细解释如何正确引入必要的 JAXB 依赖,以确保代码生成过程顺利进行。
在使用 Maven 的 CXF 插件 (cxf-codegen-plugin) 从 WSDL 文件生成 Java 代码时,你可能会遇到与 JAXB (Java Architecture for XML Binding) 相关的错误,特别是在使用 Java 11 及更高版本时。 这是因为 Java 11 移除了 javax.xml.bind 模块,需要显式引入 JAXB 的替代实现。以下提供一种可行的解决方案,通过调整 Maven 配置和引入正确的依赖项来解决这个问题。
以下是一个完整的 pom.xml 文件示例,展示了如何配置 jaxb2-maven-plugin 插件来从 WSDL 文件生成 Java 代码,并包含了必要的 JAXB 依赖项。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.project</groupId>
<artifactId>awi</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>awi</name>
<description>awi</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.2.1</version>
</dependency>
<!-- those dependencies down here are relevant -->
<dependency>
<groupId>jakarta.xml.ws</groupId>
<artifactId>jakarta.xml.ws-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.2</version>
</dependency>
</dependencies>
<build>
<finalName>exampleName</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceType>wsdl</sourceType>
<sources>
<source>${project.basedir}/src/main/resources/wsdl</source>
</sources>
<outputDirectory>${project.basedir}/src/main/java</outputDirectory>
<clearOutputDir>false</clearOutputDir>
<packageName>com.example.soap.objects</packageName>
<noPackageLevelAnnotations>true</noPackageLevelAnnotations>
</configuration>
</plugin>
</plugins>
</build>
</project>关键点说明:
立即学习“Java免费学习笔记(深入)”;
通过以上步骤,你应该能够成功解决 Maven CXF WSDL2Java 生成代码时遇到的 JAXB 相关错误,并顺利生成所需的 Java 代码。 记住,仔细检查你的 Maven 配置和依赖项,确保它们与你的项目环境兼容。
以上就是解决Maven CXF WSDL2Java生成代码时 JAXB 相关错误的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号