从XSD文件生成WSDL

我需要生成一个给定的XSD文件的WSDL文件。 我如何做到这一点? 我可以在VS2005中做到这一点吗? 什么是最简单的方法来做到这一点?

您不能 – XSD描述了Web服务的DATA方面 – WSDL描述了Web服务的function(方法调用)。 通常无法单独从数据中找出方法调用。

这些实际上是两个独立的,独特的等式。 为了简单起见,您经常会将您的XSD定义导入到<wsdl:types>标记中的WSDL中。

渣子

(感谢Cheeso指出我不准确地使用术语)

我想在这方面与marc_s有所不同,他写道:

一个XSD描述了一个Web服务的DATA方面 – WSDL描述了这个Web服务的function(方法调用)。 通常无法单独从数据中找出方法调用。

WSDL不描述函数。 WSDL定义了一个networking接口,它本身由获取消息的端点组成,然后有时会回复消息。 WSDL描述端点,请求和回复消息。 这是非常多的消息导向。

我们经常把WSDL看作是一组函数,但这是因为Web服务工具通常会生成客户端代理,这些代理将WSDL操作公开为方法或函数调用。 但是WSDL不需要这个。 这是工具的一个副作用。

编辑 :此外,在一般情况下,XSD不会定义Web服务的数据方面。 XSD定义了可能存在于兼容XML文档中的元素。 这样的文档可以通过Web服务端点作为消息进行交换,但不一定是这样。


回到这个问题,我会以不同的方式回答原来的问题。 我会说是的,有可能生成一个WSDL文件给一个xsd文件,以同样的方式可以使用鸡蛋生成一个煎蛋。

编辑 :我原来的回应一直不清楚。 让我再尝试一次。 我不build议XSD等同于WSDL,也不build议XSD足以生成WSDL。 我确实说过,如果用这个短语来表示“用XSD文件生成WSDL”,那么就可以生成一个WSDL文件。 这样做,您将增加XSD文件中的信息来生成WSDL。 您将需要定义其他的东西 – 消息部分,操作,端口types – 这些都不存在于XSD中。 但是可以通过一些创造性的努力来“生成一个给定XSD的WSDL”。

如果短语“生成给定XSD的WSDL”意味着“将XSD机械地转换为WSDL”,那么答案是否定的,您不能这样做。 鉴于我对上面的WSDL的描述,这应该是很清楚的。

使用XSD文件生成WSDL时,通常会执行类似的操作(请注意此过程中的创意步骤):

  1. 将XML模式导入WSDL(wsdl:types元素)
  2. 添加到具有附加属性的types或元素的集合,或者根据需要包装(比如数组,或包含基本types的结构)。 #1和#2的结果包含WSDL将使用的所有types。
  3. 根据以前定义的types定义一组input和输出消息(也可能是错误)。
  4. 定义一个端口types,它是in.out消息的配对集合。 您可能会将端口types视为WSDL类似于Java界面的types。
  5. 指定一个绑定,实现端口types并定义消息如何被序列化。
  6. 指定一个实现绑定的服务。

大部分的WSDL是或多或less的样板。 它看起来令人望而生畏,但主要是因为那些可怕的尖括号,我发现。

有人认为这是一个漫长的手动过程。 也许。 但是这是如何构build可互操作的服务的。 您也可以使用工具来定义WSDL。 从代码dynamic生成WSDL将导致互操作性的陷阱。

我知道这个问题很老,但是值得回答。 我个人更喜欢手动创build一个WSDL,并使用SoapUItesting合规性。 但有时(特别是对于复杂的WSDL),有三种方法可以从XSD中生成一个:

  1. 使用Eclipse从模式生成WSDL(可能是用户最友好的)
  2. 通过CXF生成WSDL(我最喜欢的)
  3. 通过使用Spring WS的约定生成一个WSDL(我最不喜欢的)

我更喜欢CXF方法,因为我是一个CLI人员。 如果它有一个CLI,你可以自动化(这是我的座右铭)。 我最喜欢Spring WS方法,因为它使用了很多框架特定的约定。

有更多的人认识CXF(我相信),而不是WS。 所以任何可以为新工程师提供学习曲线的东西(没有任何明显的优势或投资回报率)是我所憎恶的。

它也应该不去说任何生成的WSDL应该被testing的有效性和合规性(并且调整直到它符合),并且你的应用程序发布一个静态的wsdl(而不是返回一个自动生成的)。

根据我的经验,您从WS-I兼容的wsdl开始,然后您的应用程序自动生成(并返回给消费者)一个不兼容的。

换句话说,小心汽车魔法。

这可以帮助:在Eclipse中使用XSD创buildWSDL http://helloworldpoc.wordpress.com/web-services/92-2/

这个工具xsd2wsdl是Apache CXF项目的一部分,它将生成一个极简主义的WSDL。

我个人(并给予我所知道的,即Java和轴),我会从.xsd文件(Axis 2可以做到这一点)生成一个Java数据模型,然后添加一个接口来描述我的Web服务,使用该模型,然后从该接口生成一个WSDL。

因为.NET也具有所有这些function,所以在这个生态系统中也必须做到这一点。

我们可以从xsd生成wsdl文件,但是你必须使用oracle企业版的eclipse(OEPE)。 只需创buildxsd,然后右键单击 – >新build – > wsdl …