2009-05-28 187 views
32

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

+0

这可能有所帮助: 在Eclipse中使用XSD创建WSDL http://helloworldpoc.wordpress.com/web-services/92-2/ – sim

回答

44

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

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

马克

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

+0

Hi Marc! 谢谢你澄清!我会回去做这个作业! – Ausgar

+0

Marc,你的意思是“将模式导入wsdl:types”而不是“将XSD包含到wsdl:Schema中”? – Cheeso

+1

您可以同时执行这两种操作 - 您可以在WSDL中包含XSD,也可以将XSD的内容复制并粘贴到WSDL中 - 两种方法都可行。 –

0

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

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

+0

听起来像循环的Gee。为什么不通过xsd生成WSDL:将XSD导入到wsdl:types元素中,然后从THAT生成Java或.NET接口?它被称为“WSDL优先方法”,它具有良好的互操作性。 – Cheeso

+1

因为你想要定义Web服务的方法,并且.xsd没有指定这些方法,所以你必须手动编辑这些方法到你用你的方式生成的任何.wsdl中 - idiotic IMO。 – JeeBee

25

我想和这个marc_s,谁写于不同:

一个XSD描述数据方面如网络服务的 - WSDL描述了 (方法调用)的功能。您通常不能通过 单独计算出您的 数据中的方法调用。

WSDL没有描述功能。 WSDL定义了一个网络接口,它本身由获取消息的终端组成,然后有时会回复消息。 WSDL描述端点以及请求和回复消息。这是非常多的消息导向。

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

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


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

编辑:我原来的回答一直不清楚。让我再尝试一次。我不建议XSD等同于WSDL,也不建议XSD足以生成WSDL。我确实说可能生成一个WSDL,给定一个XSD文件,如果通过这个短语,你的意思是“使用XSD文件生成一个WSDL”。这样做,您将增加XSD文件中的信息以生成WSDL。您需要定义其他内容 - 消息部分,操作,端口类型 - 这些都不在XSD中。但是可以通过一些创造性的努力“在给定XSD的情况下生成WSDL”。

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

当使用XSD文件生成WSDL,你通常会做这样的事情(注意此过程中的创造性步骤):

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

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

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

+0

你打算如何确定SOAP动作等?只是从数据?这至多有点推测,不是吗? –

+0

你如何从你的XSD知道哪些wsdl:操作会有哪些SOAP错误等?您可能最多只能使用GUESS ..... –

+0

您如何从您的XSD知道您将拥有哪种SOAP绑定? style = document或style = RPC ??? –

3

此工具xsd2wsdl Apache CXF项目的一部分,它将生成最低限度的WSDL。

0

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

6

我知道这个问题是旧的,但它应该得到答案。我个人更喜欢手动创建WSDL并使用SoapUI测试合规性。但有时(特别是对于复杂的WSDL),你有三种方式来产生一个出XSD的:

  1. Generating a WSDL from a schema using Eclipse (probably the most user-friendly)
  2. Generating a WSDL via CXF (my favorite)
  3. Generating a WSDL via conventions using Spring WS (my least favorite)

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

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

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

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

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