使用wsimport处理不规范WSDL,如何正确创建外部绑定文件?
解决JAX-WS wsimport绑定文件错误及WSDL类型解析问题
我来帮你一步步搞定这些问题:
先处理绑定文件的XPath错误
你碰到的Prefix must resolve to a namespace: xsd错误,根源是绑定文件里没声明xsd命名空间,导致XPath无法识别xsd:element这个前缀。修改你的bindings.xjb文件,补上xsd命名空间,同时调整schema路径写法(去掉多余的file:前缀,用相对路径更稳妥):
<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- 新增xsd命名空间声明 --> <jaxb:bindings schemaLocation="../wsdl/WebServiceSVC.wsdl#types?schema1"> <jaxb:bindings node="//xsd:element[@name='CheckShortBankruptInfoRequest']"> <jaxb:class name="CheckShortBankruptInfoRequestEl"/> </jaxb:bindings> </jaxb:bindings> </jaxb:bindings>
修正pom.xml里的路径空格问题
你的bindingDirectory配置前后有空格,这可能导致插件找不到绑定文件,赶紧去掉空格:
<bindingDirectory>${basedir}/src/main/resources/bindings</bindingDirectory>
解决最初的类型解析警告
src-resolve: Cannot resolve the name 'CheckShortBankruptInfoRequest' to a(n) 'type definition' component这个警告,一般是因为WSDL的schema里元素和对应类型同名,或者类型引用存在导入问题。如果上面的修改还没解决,试试用JAX-WS绑定语法精准定位WSDL结构:
<?xml version="1.0" encoding="UTF-8"?> <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" version="2.1"> <!-- 绑定到目标WSDL文件 --> <jaxws:bindings wsdlLocation="../wsdl/WebServiceSVC.wsdl"> <!-- 定位到WSDL中的第一个schema节点 --> <jaxb:bindings node="//wsdl:definitions/wsdl:types/xsd:schema[1]"> <!-- 绑定请求元素 --> <jaxb:bindings node="//xsd:element[@name='CheckShortBankruptInfoRequest']"> <jaxb:class name="CheckShortBankruptInfoRequestEl"/> </jaxb:bindings> <!-- 绑定对应的复杂类型(如果需要) --> <jaxb:bindings node="//xsd:complexType[@name='CheckShortBankruptInfoRequest']"> <jaxb:class name="CheckShortBankruptInfoRequestType"/> </jaxb:bindings> </jaxb:bindings> </jaxws:bindings> </jaxws:bindings>
这种方式通过WSDL命名空间直接定位schema,能更准确处理WSDL内部的结构问题。
额外注意点
- 确保本地WSDL文件和在线版本完全一致,避免本地文件有缺失或修改
- 你的
vmArgs配置-Djavax.xml.accessExternalSchema=all是正确的,它解决了访问外部schema的权限问题,保留这个配置就行
内容的提问来源于stack exchange,提问作者Kirill
相关产品推荐
相关产品推荐

