我的项目正在使用
cxf-codegen
插件从wsdl
生成java代码,生成的文件结构如下:
但是当我将版本从 3.5.5 升级到 4.0.3 时,生成的文件的结构变得不同,并且生成的类中缺少一些代码,尽管我没有更改 wsdl 文件中的任何内容。
新结构如下:
这是 cxf-codegen 插件:
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wjsdlOption>
<wsdl>${project.basedir}/src/main/resources/CustomerAgreementVBS/WSDL/CustomerAgreementVBS.wsdl</wsdl>
<wsdlLocation>CustomerAgreementVBS/WSDL/CustomerAgreementVBS.wsdl</wsdlLocation>
<extraargs>
<extraarg>-b</extraarg>
<extraarg>${project.basedir}/src/main/resources/CustomerAgreementVBS/WSDL/service_mapping.xml
</extraarg>
</extraargs>
<extendedSoapHeaders>true</extendedSoapHeaders>
</wjsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
这是额外参数
service_mapping.xml
文件:
<?xml version="1.0"?>
<jaxws:bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="CustomerAgreementVBS.wsdl"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">
<jaxws:bindings node="wsdl:definitions">
<jaxws:package name="com.example.dxl.gr.ws.client.customeragreement"/>
<jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
<handler-chain>
</handler-chain>
</handler-chains>
</jaxws:bindings>
</jaxws:bindings>
有谁知道为什么会这样吗?
解决方案位于
service_mapping.xml
文件中。应该如下所示:
<?xml version="1.0"?>
<jaxws:bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="CustomerAgreementVBS.wsdl"
xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws">
<jaxws:bindings node="wsdl:definitions">
<jaxws:package name="com.example.dxl.gr.ws.client.customeragreement"/>
<jaxws:enableAsyncMapping>true</jaxws:enableAsyncMapping>
</jaxws:bindings>
</jaxws:bindings>