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

Apache CXF生成Java Stub遇重复本地名错误,求解决方案

解决Apache CXF wsdl2java参数重名报错的可行方案

针对你遇到的verifyDataExistence方法因输入输出同名参数(类型不同)导致生成Stub失败的问题,结合JAXB绑定未生效的情况,给出以下具体解决办法:

方法1:直接针对WSDL消息部分绑定重命名

绕过独立XSD的绑定问题,直接在WSDL层面定位输入输出消息的参数进行重命名:

  • 编写JAXB绑定文件(例如bindings.xml),定位到目标方法的输入输出消息节点,指定新的参数名:
<jaxws:bindings wsdlLocation="your-service.wsdl"
                xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
                xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <!-- 重命名请求中的theirData参数 -->
    <jaxws:bindings node="//wsdl:definitions/wsdl:message[@name='VerifyDataExistenceRequest']">
        <jaxb:bindings node="//wsdl:part[@name='theirData']">
            <jaxb:property name="inputTheirData"/>
        </jaxb:bindings>
    </jaxws:bindings>
    
    <!-- 重命名响应中的theirData参数 -->
    <jaxws:bindings node="//wsdl:definitions/wsdl:message[@name='VerifyDataExistenceResponse']">
        <jaxb:bindings node="//wsdl:part[@name='theirData']">
            <jaxb:property name="outputTheirData"/>
        </jaxb:bindings>
    </jaxws:bindings>
</jaxws:bindings>
  • 执行wsdl2java时通过-b参数指定该绑定文件:
    wsdl2java -b bindings.xml -d ./generated-src http://third-party-service-url/service.wsdl

方法2:正确关联独立XSD的绑定配置

如果需要针对XSD层面修改,确保绑定文件正确关联第三方的独立XSD:

  1. 先将第三方的WSDL和所有引用的XSD下载到本地,避免远程路径解析问题
  2. 编写绑定文件,指定XSD的本地路径和目标命名空间,定位到对应元素重命名:
<jaxb:bindings version="2.1"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <!-- 绑定请求XSD中的theirData元素 -->
    <jaxb:bindings schemaLocation="./input-types.xsd" node="/xsd:schema">
        <jaxb:bindings node="//xsd:element[@name='theirData']">
            <jaxb:property name="inputTheirData"/>
        </jaxb:bindings>
    </jaxb:bindings>
    
    <!-- 绑定响应XSD中的theirData元素 -->
    <jaxb:bindings schemaLocation="./output-types.xsd" node="/xsd:schema">
        <jaxb:bindings node="//xsd:element[@name='theirData']">
            <jaxb:property name="outputTheirData"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>
  1. 执行wsdl2java时带上绑定文件,同时确保本地WSDL中对XSD的引用路径已改为本地文件路径

方法3:使用CXF的额外参数强制处理

如果上述绑定方式仍不生效,可以尝试在wsdl2java命令中添加-noAddressBinding参数,关闭地址绑定的自动处理,减少冲突概率:
wsdl2java -b bindings.xml -noAddressBinding -d ./generated-src your-local-service.wsdl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:08:10