You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级cxf-codegen-plugin至4.0.3后生成代码结构异常咨询

问题:CXF-codegen-plugin升级至4.0.3后代码生成异常

现象描述

使用cxf-codegen-plugin从WSDL生成Java代码时,版本差异导致生成结构和内容异常:

  • 3.5.5版本生成结构:
    • generated-sources
      • cxf
        • com.example
          • dxl.gr.ws.client.customeragreement
          • group
  • 4.0.3版本生成结构(未修改WSDL):
    • generated-sources
      • cxf
        • com.example
          • group
            不仅缺失了dxl.gr.ws.client.customeragreement目录,生成的类还存在代码缺失。

插件配置

<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>

原因分析与解决建议

核心原因

  1. 配置拼写错误:插件配置里的<wjsdlOption>是笔误,正确应为<wsdlOption>。3.5.5版本对该错误容错性较高,仍能解析配置;但4.0.3版本校验更严格,导致绑定文件参数未被加载,包名配置失效,本该生成到指定包的代码未生成。
  2. Jakarta EE命名空间兼容问题:CXF 4.x基于Jakarta EE API(替代原Java EE),绑定文件中使用的旧Java EE命名空间(http://java.sun.com/xml/ns/jaxws、http://java.sun.com/xml/ns/javaee)已被弃用,4.0.3版本可能忽略这些旧命名空间下的配置,导致包名映射不生效。
  3. 默认行为变更:CXF 4.x的wsdl2java工具默认生成策略有调整,结合上述配置问题,最终导致部分代码缺失。

解决步骤

  1. 修正插件配置拼写错误:将<wjsdlOption>改为<wsdlOption>;
  2. 更新绑定文件命名空间:
    <?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>
            <handler-chains xmlns="https://jakarta.ee/xml/ns/javaee">
                <handler-chain>
                </handler-chain>
            </handler-chains>
        </jaxws:bindings>
    </jaxws:bindings>
    
  3. 清理并重新生成:执行mvn clean generate-sources,确保旧生成文件被清理,新配置生效。

内容的提问来源于stack exchange,提问作者Muhammad bakr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:29:57