如何从wsdl生成xsd

64

有没有一种方法可以从wsdl生成xsd,是否有任何链接或工具可用?最简单的方法是什么?


你可以从WSDL生成XML,因为WSDL是服务的规范。但转换为XSD听起来很奇怪,你为什么要这样做呢? - Jontatas
1
因为需要使用wsdl的xsd创建xml。 - user3365075
10
您可以提取WSDL中 <types/> 元素中导入或嵌入的XSD。如果是导入的,则只需获取URL(如果它是相对路径,则可能需要计算绝对路径)。如果是嵌入式的,则提取 <types/> 内容即可。 - helderdarocha
4
顺便提一句,XJC代码生成器可以直接处理WSDL:https://dev59.com/questions/bWUo5IYBdhLWcg3wnwj2 - Vadzim
我在这个任务上卡了太久。虽然手动转换并不难,但有一个工具可以做到(XMLSpy)。而且还可以免费评估该工具30天。 - Pete Ythong
6个回答

51
你可以使用SoapUI: http://www.soapui.org/ 这是一款非常方便的程序。创建一个新项目,连接到WSDL链接,然后右键单击该项目并选择“显示接口查看器”。在左侧的“模式”下,您可以看到XSD。但是,SoapUI可以做很多其他事情!

9
我找不到从这个工具导出XSD的选项...你是不是指的只是将其用作WSDL查看器,然后按照@helderdarocha的评论建议复制和粘贴<wsdl:types>元素的内容(这似乎是正确的)? - Anentropic
8
好的,我会尽力进行翻译。这句话的意思是:“是的,我只是复制粘贴。也许有一种更优雅的方法可以做到这一点?”我会尽量保持原文的意思,并使其更加通俗易懂,但不会在翻译中添加解释或其他额外的内容。 - D2TheC
4
太好了。我尝试使用svcutil.exe并生成了模式,但不止一个XSD文件,而是多个XSD文件,这不是客户端要求的。只需从SOAPUI中复制粘贴(再次是在wsdl:types标签之间的内容),然后将其保存为XSD文件即可。不需要像使用Microsoft工具时那样费力地处理参数和标志,也不需要合并文件。复制、粘贴、保存,搞定了。感谢提供信息。SOAPUI是一款很棒的工具。 - infocyde
3
如果有其他人在阅读时遇到问题,复制粘贴到新文件可能无法创建一致的模式。对于小型、单一模式的WSDL文件,这种方法是可行的。然而,在我得到的某个WSDL文件中(由第三方提供),存在6个不带相关导入语句的不同模式。所以我猜这种解决方案的质量取决于所提供WSDL的质量。 - DrUseful
2
没有“模式”选项卡。 - Mukhamedali Zhadigerov
显示剩余2条评论

21

请按以下步骤操作:

  1. 使用WSDL创建一个项目。
  2. 选择您的接口并在接口查看器中打开。
  3. 导航到"WSDL内容"选项卡。
  4. 使用"WSDL内容"选项卡下的最后一个图标:"将整个WSDL和包含/导入的文件导出到本地目录"。
  5. 选择您要将XSD导出到的文件夹。

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


43
仅导出WSDL文件,不包括XSD文件。(使用SoapUI 5.2.1)也许我做错了什么? - BitfulByte
2
@Raj,你在这里指的是哪个版本的SoapUI? - Sam
1
@PimHazebroek 我已经添加了一个截图作为参考,我正在使用SoapUI 5.4.0。 - Raj
3
在SoapUI 5.5中,该选项仅生成一个WSDL文件,您可以执行脏复制粘贴操作以获取方案定义内部的定义:wsdl:definitions-> wsdl:types-> xs:schema并创建一个具有xsd扩展名的新文件。如果需要,添加第一行:<?xml version =“1.0”?> - Jairo Martínez
在SoapUI 5.7中,它会生成一个独立的XSD文件。 - Rubens Amaral

2
< p > (当.wsdl通过import引用.xsd /模式时) 如果您正在使用WMB Tooklit(v8.0.0.4 WMB),则可以按照以下步骤找到.xsd:

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

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


0

有一次我在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/">

0
你可以使用utilityarena.com,它有一个免费的实用程序将复杂的WSDL转换为XSD。

您的回答可以通过添加更多支持信息来改进。请[编辑]以添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是否正确。您可以在帮助中心中找到有关编写良好答案的更多信息。 - Community

-1
1. Soap ui -> 新建SOAPUI项目 -> 使用WSDL创建项目(假设我们在其中有一个testService)。 2. 你将会有一个名为TestService的文件夹,然后里面会有tokenTestServiceSoapBinding(示例)-> 右键点击它。 3. 导出定义 -> 指定需要放置定义的位置。 4. 导出的位置将会有xsd和wsdl文件。 希望这对你有所帮助!

就像其他答案中所述,不同版本的SoapUI不会以这种方式导出XSD,您使用的是哪个版本? - iBobb
我按照你的步骤操作,但在SoapUI 5.7.0中没有取得任何进展。 - Shad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接