使用wsdl2java
Apache CXF 4.0.3 时,我在尝试将 XSD 导入到 WSDL 文件中时遇到错误。这些文件来自第 3 方,对于早期版本的 CXF,导入工作正常。
我已将文件简化到最低限度以重现该问题。这是 WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="https://webservices.sabre.com/websvc">
<types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://schemas.xmlsoap.org/ws/2002/12/secext" schemaLocation="wsse.xsd"/>
</xsd:schema>
</types>
</definitions>
这是以下内容wsse.xsd
:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
当我跑步时wsdl2java
:
./wsdl2java -encoding UTF-8 -d /project/src/main/java -b "file:/project/src/main/resources/schema/custom-bindings/globalbinding.xjb" -p "=org.a.b.c" -suppress-generated-date -wsdlLocation classpath:schema/wsdl/sample.wsdl -verbose file:/project/src/main/resources/schema/wsdl/sample.wsdl
我收到错误:
org.apache.cxf.tools.common.ToolException:file:///apache-cxf-4.0.3/bin/ [1,132]:导入模式“”的目标命名空间与预期值“http”不一致://schemas.xmlsoap.org/ws/2002/12/secext
的targetNamespace
与的 相wsse.xsd
匹配。我不明白为什么元素中的是相关的,并且我已经看到很多 xsd 导入的示例,其中元素缺少.namespace
xsd:import
targetNamespace
definitions
xsd:schema
targetNamespace
我尝试过设置targetNamespace
,definitions
但schema
它并没有改变错误。如果我更改正在导入的targetNamespace
文件,我会收到有关正在导入的文件wsse.xsd
之间的命名空间不匹配的不同错误。xsd:import
这是什么原因呢?
问题来自于
-p "=org.a.b.c"
命令行选项。来自文档:
如果要在
org.a.b.c
包中输出生成的代码,只需设置-p "org.a.b.c"
,=
前面不要有 packageName。