从XSD文件生成WSDL

Aus*_*gar 38 xsd wsdl

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

mar*_*c_s 50

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

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

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

  • 两者都可以-既可以在WSDL中包含XSD,也可以将XSD的内容复制并粘贴到WSDL中-两者都可以。 (2认同)

Che*_*eso 27

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

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

WSDL没有描述函数.WSDL定义了一个网络接口,它本身由获取消息的端点组成,然后有时会回复消息.WSDL描述了端点,请求和回复消息.它非常注重消息.

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

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


回到问题我会回答原来的问题.我说是的,可以 生成给定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. 指定绑定,该绑定实现端口类型并定义消息的序列化方式.
  6. 指定实现绑定的服务.

大多数WSDL或多或少是样板文件.它看起来令人生畏,但这主要是因为那些可怕且丰富的尖括号,我发现了.

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


lui*_*nal 7

我知道这个问题很老,但值得回答.我个人更喜欢手工创建WSDL并使用SoapUI测试合规性.但有时(特别是对于复杂的WSDL),您有三种方法可以生成一个XSD:

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

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

有更多人了解CXF(我相信)而不是Spring WS.因此,任何可以为新工程师提供学习曲线的东西(没有任何明显的优势或投资回报率)都是我所不喜欢的.

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

根据我的经验,您从符合WS-I的wsdl开始,然后您的应用程序自动生成(并返回给消费者)不合规的wsdl.

换句话说,要小心汽车魔术.


Vis*_*hnu 5

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