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:
- 先将第三方的WSDL和所有引用的XSD下载到本地,避免远程路径解析问题
- 编写绑定文件,指定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>
- 执行wsdl2java时带上绑定文件,同时确保本地WSDL中对XSD的引用路径已改为本地文件路径
方法3:使用CXF的额外参数强制处理
如果上述绑定方式仍不生效,可以尝试在wsdl2java命令中添加-noAddressBinding参数,关闭地址绑定的自动处理,减少冲突概率:wsdl2java -b bindings.xml -noAddressBinding -d ./generated-src your-local-service.wsdl
内容的提问来源于stack exchange,提问作者engilyin
相关产品推荐
相关产品推荐

