如何用Maven wsdl2java生成带全限定类名的Java类
解决Maven wsdl2java生成全限定类名字段的问题
要让wsdl2java生成带全限定类名的字段(而非短类名),同时不修改现有包名/命名空间,你可以通过JAXB绑定文件来实现,不需要添加改变包结构的额外参数。
步骤1:创建JAXB绑定文件
在项目资源目录(比如src/main/resources)下新建一个bindings.xml文件,内容如下:
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.1"> <jaxb:globalBindings> <!-- 禁止生成同包类的import语句,强制使用全限定类名 --> <xjc:noImports /> </jaxb:globalBindings> </jaxb:bindings>
这个配置会告诉JAXB的代码生成器(xjc)不要导入当前包内的类,而是直接在字段声明中使用全限定类名。
步骤2:配置Maven的wsdl2java插件
以常用的cxf-codegen-plugin为例,在你的pom.xml中更新插件配置,引入刚才创建的绑定文件:
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>3.5.5</version> <!-- 使用适合你项目的版本 --> <executions> <execution> <id>generate-ws-client</id> <phase>generate-sources</phase> <goals> <goal>wsdl2java</goal> </goals> <configuration> <wsdlOptions> <wsdlOption> <wsdl>${project.basedir}/src/main/resources/你的WSDL文件.wsdl</wsdl> <!-- 绑定文件路径 --> <bindingFiles> <bindingFile>${project.basedir}/src/main/resources/bindings.xml</bindingFile> </bindingFiles> </wsdlOption> </wsdlOptions> </configuration> </execution> </executions> </plugin>
如果你使用的是jaxws-maven-plugin,配置方式类似,只需在<configuration>中添加<bindingFiles>节点即可。
验证效果
执行mvn generate-sources命令后,生成的MGTSInstantRequest类就会变成你期望的形式:
@XmlRootElement(name = "MGTSInstantRequest") public class MGTSInstantRequest { @XmlElement(name = "Input", required = true) protected com.ank.mgtsinstant.mgtsinstantwsdl.Input input; }
这个方法不会修改任何命名空间或包名,完全符合你“不能修改现有包结构”的要求。
内容的提问来源于stack exchange,提问作者user2602041
相关产品推荐
相关产品推荐

