我需要在给定XSD文件的情况下生成WSDL文件。我该怎么做呢?我可以在VS2005中这样做吗?最简单的方法是什么?
答案 0 :(得分:48)
您不能 - XSD描述数据方面,例如Web服务的一部分 - WSDL描述了Web服务的功能(方法调用)。您通常无法单独从数据中找出方法调用。
这些实际上是两个独立的,独特的部分。为简单起见,您经常将XSD定义导入<wsdl:types>
标记中的WSDL。
(感谢Cheeso指出我对术语的不正确用法)
答案 1 :(得分:26)
我想与marc_s在这方面有所不同,谁写道:
XSD描述了数据方面,例如: 一个Web服务 - WSDL描述 Web服务的功能 (方法调用)。你通常不能 找出你的方法调用 仅数据。
WSDL没有描述功能。 WSDL定义了一个网络接口,它本身由获取消息的端点组成,然后有时会回复消息。 WSDL描述了端点,请求和回复消息。它非常注重消息。
我们经常将WSDL视为一组函数,但这是因为Web服务工具通常会生成客户端代理,这些代理将WSDL操作公开为方法或函数调用。但WSDL并不要求这样做。这是工具的副作用。
编辑:此外,在一般情况下,XSD不会定义Web服务的数据方面。 XSD定义了兼容的XML文档中可能存在的元素。这样的文档可以作为Web服务端点上的消息进行交换,但不一定如此。
回到问题我会稍微回答一下原来的问题。我woudl说YES,有可能生成给定xsd文件的WSDL文件,就像使用egg生成煎蛋一样。
编辑:我原来的反应一直不清楚。让我再尝试一次。我不建议XSD等同于WSDL,也不建议XSD足以生成WSDL。我确实说,给定一个XSD文件可以生成一个WSDL,如果用这个短语你的意思是“使用XSD文件生成一个WSDL”。这样做,您将扩充XSD文件中的信息以生成WSDL。您将需要定义其他内容 - 消息部分,操作,端口类型 - XSD中不存在这些内容。但是,通过一些创造性的努力,可以“在给定XSD的情况下生成WSDL”。
如果短语“生成给定XSD的WSDL”意味着“将XSD机械转换为WSDL”,则答案为否,您不能这样做。鉴于我对上面的WSDL的描述,这一点应该很清楚。
使用XSD文件生成WSDL时,通常会执行以下操作(请注意此过程中的创意步骤):
大多数WSDL或多或少是样板文件。它看起来令人生畏,但这主要是因为那些可怕且丰富的尖括号,我发现了。
有些人认为这是一个冗长的手工流程。也许。但这就是您如何构建可互操作的服务。您还可以使用工具来定义WSDL。从代码动态生成WSDL将导致互操作陷阱。
答案 2 :(得分:6)
我知道这个问题很老,但值得回答。我个人更喜欢手工创建WSDL并使用SoapUI测试合规性。但有时(特别是对于复杂的WSDL),您有三种方法可以从XSD中生成一个:
我更喜欢CXF方法,因为我是一个CLI人员。如果它有CLI,你可以自动化(这是我的座右铭)。我最喜欢Spring WS方法,因为它使用了很多特定于框架的约定。
有更多人了解CXF(我相信)而不是Spring WS。因此,任何可以为新工程师提供学习曲线的东西(没有任何明显的优势或投资回报率)都是我所不喜欢的。
它也应该没有说任何生成的WSDL应该进行有效性和合规性测试(并调整直到它符合),并且你的应用程序发布一个静态wsdl(而不是返回一个自动生成的。)
根据我的经验,您从符合WS-I标准的wsdl开始,然后您的应用程序自动生成(并返回给消费者)不合规的wsdl。
换句话说,要小心自动魔术。
答案 3 :(得分:3)
这个工具xsd2wsdl是Apache CXF项目的一部分,它将生成一个极简主义的WSDL。
答案 4 :(得分:0)
就个人而言(并且根据我所知,即Java和轴),我将从.xsd文件(Axis 2可以执行此操作)生成Java数据模型,然后添加一个界面来描述我的Web服务使用该模型,然后从该接口生成WSDL。
由于.NET也具有所有这些功能,因此必须能够在该生态系统中完成所有这些功能。
答案 5 :(得分:0)
我们可以从xsd生成wsdl文件,但你必须使用oracle企业包eclipse(OEPE)。 只需创建xsd然后右键单击 - > new-&gt; wsdl ...