axistools-maven-plugin执行wsdl2java时Global Bindings未被识别
问题根因
你使用的axistools-maven-plugin基于Axis 1.x技术栈实现,默认不支持JAXWS/JAXB格式的绑定文件,你当前编写的jaxws:bindings格式绑定是为CXF、jaxws-maven-plugin等JAXWS栈设计的,Axis 1.x会直接忽略该配置,导致绑定不生效。
修复步骤
1. 调整插件配置
优先推荐直接在插件全局配置中添加映射参数,无需额外绑定文件即可解决问题,调整后的pom插件配置如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>axistools-maven-plugin</artifactId> <version>1.4</version> <configuration> <sourceDirectory>${basedir}/src/wsdl/</sourceDirectory> <typeMappingVersion>1.2</typeMappingVersion> <wrapArrays>false</wrapArrays> <!-- 新增以下两个参数 --> <wrapSimpleTypes>false</wrapSimpleTypes> <extraArguments> <extraArgument>-Djavax.xml.bind.DatatypeConverter=javax.xml.bind.DatatypeConverter</extraArgument> </extraArguments> <!-- 若保留绑定文件需移到全局configuration层级,部分版本插件不识别execution层级的bindingFiles配置 --> <bindingFiles> <bindingFile>${basedir}/src/wsdl/globalBinding.xml</bindingFile> </bindingFiles> </configuration> <executions> <execution> <id>all</id> <configuration> <wsdlFiles> <wsdlFile>Market.wsdl</wsdlFile> <wsdlFile>Payment.wsdl</wsdlFile> <wsdlFile>Customer.wsdl</wsdlFile> </wsdlFiles> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> <!-- 新增jaxb依赖保证类型转换逻辑可用 --> <dependencies> <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-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> </dependencies> </plugin>
2. 兼容绑定文件修改(若需要保留独立绑定文件)
如果需要继续用独立绑定文件,需要把文件修改为Axis 1.x兼容格式,示例如下:
<?xml version="1.0" encoding="UTF-8"?> <axis-wsdl2java-bindings xmlns="http://mojo.codehaus.org/axistools/wsdl2java/bindings" version="1.0"> <globalBindings> <javaTypeMapping> <xmlType>xsd:decimal</xmlType> <javaType>java.math.BigDecimal</javaType> <parseMethod>javax.xml.bind.DatatypeConverter.parseDecimal</parseMethod> <printMethod>javax.xml.bind.DatatypeConverter.printDecimal</printMethod> </javaTypeMapping> </globalBindings> </axis-wsdl2java-bindings>
同时删除原绑定文件中的wsdlLocation="Customer.wsdl"配置,否则绑定仅对Customer.wsdl生效,其余两个WSDL中的decimal类型仍会触发报错。
3. 清理缓存重新构建
执行以下命令清理之前生成的错误代码,重新构建即可:
mvn clean compile
内容的提问来源于stack exchange,提问作者Neeti
相关产品推荐
相关产品推荐

