从XSD文件生成WSDL

时间:2009-05-28 09:56:47

标签: wsdl xsd

我需要在给定XSD文件的情况下生成WSDL文件。我该怎么做呢?我可以在VS2005中这样做吗?最简单的方法是什么?

6 个答案:

答案 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时,通常会执行以下操作(请注意此过程中的创意步骤):

  1. 将XML架构导入WSDL(wsdl:types元素)
  2. 根据需要添加带有其他类型或元素的类型或元素集,或包装器(假设数组或包含基本类型的结构)。 #1和#2的结果包含WSDL将使用的所有类型。
  3. 根据先前定义的类型定义一组输入和输出消息(可能是故障)。
  4. 定义一个port-type,它是in.out消息的配对集合。您可能会将port-type视为Java接口的WSDL模拟。
  5. 指定绑定,该绑定实现port-type并定义消息的序列化方式。
  6. 指定实现绑定的服务。
  7. 大多数WSDL或多或少是样板文件。它看起来令人生畏,但这主要是因为那些可怕且丰富的尖括号,我发现了。

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

答案 2 :(得分: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)
  4. 我更喜欢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 ...