将 XSD 导入目标命名空间中的 WSDL 错误

问题描述 投票:0回答:2

使用 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
与导入文件之间命名空间不匹配的不同错误。

这是什么原因?

java xsd wsdl cxf
2个回答
1
投票

问题来自于

-p "=org.a.b.c"
命令行选项。

来自文档

-p [ wsdl-namespace= ] 包名称

指定零个或多个用于生成代码的包名称。 (可选)指定 WSDL 命名空间以进行包名称映射。

如果要输出

org.a.b.c
包中的生成代码,只需设置
-p "org.a.b.c"
即可,packageName前不带
=


0
投票

我已经下载了 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 或者我如何生成它

© www.soinside.com 2019 - 2024. All rights reserved.