如何从 wsdl 生成 xsd

Posted

技术标签:

【中文标题】如何从 wsdl 生成 xsd【英文标题】:How to generate xsd from wsdl 【发布时间】:2014-06-07 23:03:31 【问题描述】:

有什么方法可以从 wsdl 生成 xsd。 任何链接或工具也可以。最简单的方法是什么?

【问题讨论】:

您可以从 WSDL 生成 XML,因为 WSDL 是服务规范。不过,转换为 XSD 听起来很奇怪。你为什么想这么做? ***.com/questions/1952015/… 因为需要使用 wsdl 的 xsd 创建 xml。 您可以提取在 WSDL 的 <types/> 元素中导入或嵌入的 XSD。如果已导入,您只需获取 URL(如果是相对路径,还可能计算绝对路径)。如果是嵌入的,则提取<types/>的内容。 顺便说一句,XJC 代码生成器可以直接处理 WSDL:***.com/questions/15903249/… 我在这个任务上坚持了太久。手动转换并不难,但有一个工具(XMLSpy)。也可以免费评估该工具 30。 【参考方案1】:

您可以使用 SoapUI:http://www.soapui.org/ 这是一个通常很方便的程序。 创建一个新项目,连接到 WSDL 链接,然后右键单击该项目并说“显示界面查看器”。在左侧的“Schemas”下,您可以看到 XSD。

SoapUI 可以做很多事情!

【讨论】:

我找不到从该工具导出 XSD 的选项...您只是想将其用作 WSDL 查看器并使用它来复制和粘贴 <wsdl:types> 元素的内容为在@helderdarocha 的评论中建议(这似乎是正确的)? 是的,我只是复制粘贴。也许有更优雅的方式来做到这一点? 太棒了。我尝试使用 svcutil.exe,它生成了架构,但生成了多个 XSD 文件,而不仅仅是客户端请求的一个 XSD 文件。只需从 SOAPUI 复制和粘贴(同样是 标记之间的内容)并将其保存为 XSD 文件就可以很好地工作。不要像在 Microsoft 工具中使用什么标志/参数那样玩弄 coda obscura。没有合并文件。复制,粘贴,保存,完成。谢谢(你的)信息。 SOAPUI 是一个很棒的工具。 如果这对其他人来说是个问题,复制粘贴到新文件并不总是创建一致的模式。它适用于小型、单一模式的 WSDL 文件。但是,在我(由第 3 方)提供的 WSDL 上,有 6 个不同的模式没有相关的导入语句。所以我猜这个解决方案的质量取决于提供的 WSDL 的质量。 没有“架构”选项卡【参考方案2】:

按照以下步骤操作:

    使用 WSDL 创建项目。 选择您的界面并在界面查看器中打开。 导航到“WSDL 内容”选项卡。 使用“WSDL 内容”选项卡下的最后一个图标:“将整个 WSDL 和包含/导入的文件导出到本地目录”。 选择要将 XSD 导出到的文件夹。

注意:SOAPUI 将删除所有相对路径并将所有 XSD 保存到同一文件夹。参考截图:

【讨论】:

它只导出 WSDL,不导出 XSD 文件。 (使用 SoapUI 5.2.1)也许我做错了什么? @Raj,您在这里指的是哪个版本的 SoapUI? @PimHazebroek 我添加了一个截图供参考,我使用的是 SoapUI 5.4.0 在 SoapUI 5.5 中,该选项仅生成一个 wsdl 文件,您可以继续进行脏复制粘贴操作以获取其中的方案定义:wsdl:definitions -> wsdl:types -> xs:schema 并使用 xsd 扩展名。如果需要,添加第一行:<?xml version="1.0"?>【参考方案3】:

(当 .wsdl 使用 import 引用 .xsd/schemas 时) 如果您使用的是 WMB Toolit (v8.0.0.4 WMB),那么您可以使用以下步骤找到 .xsd:

创建库(可选)> 右键单击​​,新建消息模型文件 > 选择 SOAP XML > 选择选项“我的数据已经有 WSDL”>“选择工作区外的文件”>“选择要导入的 WSDL 绑定”(如果有多个)>完成。

这将为您提供工作区中的 .xsd 和 .wsdl 文件(应用程序透视图)。

【讨论】:

【参考方案4】:
    Soap ui -> 新建 SOAPUI 项目 -> 使用 wsdl 创建项目(假设我们有一个 testService) 您将有一个名为 TestService 的文件夹,然后在其中会有 tokenTestServiceSoapBinding(示例)-> 右键单击​​它 导出定义 -> 提供您需要放置定义的位置。 导出的位置将包含 xsd 和 wsdl 文件。 希望这会有所帮助!

【讨论】:

【参考方案5】:

一旦我在 wsdl 的顶部找到了一个 xsd 链接。 就像这个来自网络的 wsdl 示例一样,您可以看到一个链接 xsd1。服务器必须正在运行才能看到它。

<?xml version="1.0"?>
<definitions name="StockQuote"
             targetNamespace="http://example.com/stockquote.wsdl"
             xmlns:tns="http://example.com/stockquote.wsdl"
             xmlns:xsd1="http://example.com/stockquote.xsd"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns="http://schemas.xmlsoap.org/wsdl/">

【讨论】:

以上是关于如何从 wsdl 生成 xsd的主要内容,如果未能解决你的问题,请参考以下文章

WCF 如何从 wsdl 和 xsd 生成服务 - 合同优先

如何从现有的 WSDL 和 XSD 文件生成 WCF 服务主机

如何使用 gradle 从 WSDL 和 XSD 生成类,相当于 maven-jaxb2-plugin

从 XSD 文件生成 WSDL

SOAP/WSDL/XSD 和 REST 方法之间的比较

BizTalk Web 参考 - 生成的 XSD 具有来自 WSDL 的“丢失”信息