使用 Apache CXF 4.0.3 中的
wsdl2java
在尝试将 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: 文件:///apache-cxf-4.0.3/bin/ [1,132]: 导入模式“”的目标命名空间与 期望值“http://schemas.xmlsoap.org/ws/2002/12/secext
targetNamespace
的 wsse.xsd
与 namespace
的 xsd:import
匹配。我不明白为什么 targetNamespace
元素中的 definitions
是相关的,并且我见过很多 xsd 导入的示例,其中 xsd:schema
元素缺少 targetNamespace
。
我尝试在
targetNamespace
和 definitions
上设置 schema
,但它不会改变错误。如果我更改导入的 targetNamespace
文件中的 wsse.xsd
,我会收到有关 xsd:import
与导入文件之间命名空间不匹配的不同错误。
这是什么原因?
问题来自于
-p "=org.a.b.c"
命令行选项。
来自文档:
-p [ wsdl-namespace= ] 包名称
指定零个或多个用于生成代码的包名称。 (可选)指定 WSDL 命名空间以进行包名称映射。
如果要输出
org.a.b.c
包中的生成代码,只需设置-p "org.a.b.c"
即可,packageName前不带=
。
我已经下载了 Apache CXF 4.0.3 (https://www.apache.org/dyn/closer.lua/cxf/4.0.3/apache-cxf-4.0.3-src.zip),但是我在源代码中没有找到wsdl2java jar文件,也没有bin文件夹。你能帮忙在哪里找到 wsdl2java 或者我如何生成它