用Java创建WADL和WSDL?

时间:2014-12-06 00:49:29

标签: java rest soap wsdl wadl

我的任务是在Java中创建WADL和WSDL。我有几个问题。

首先,WSDL是一个XML文档,描述客户端如何从SOAP系统请求信息。 WADL是一个XML文档,描述客户端如何从REST系统请求信息。这些都是正确的吗?

如果是这样,他们到底做了什么?我理解SOAP和REST如何正常使用HTTP,但我无法理解WADL和WSDL的确切含义,它们的用途是什么,以及我应该如何创建一个的java。

2 个答案:

答案 0 :(得分:2)

当你的代码中有方法而你需要调用它时,你怎么称呼它?你看一下方法签名和javadoc。你会看到参数名称是什么,它们是什么意思,它们有什么类型,javadoc告诉你是否对值有一些限制,如果你不尊重它会得到什么例外,等等。

现在考虑一个Web服务。让我们先从 SOAP 开始。它是通过网络暴露的操作。你怎么称呼这个野兽?您可以看到的只是一个端点,您必须发送格式正确的SOAP负载。这会告诉你操作名称吗?参数名称和类型?限制你的价值观?没有!它绝对没有告诉你。您需要一种方法告诉客户如何调用此服务。

您可以拥有文档,就像javadoc一样。您可以使用它来学习如何拨打电话。但这将是XML。你用XML或Java编程吗?您使用Java编程,但是您需要将对象编组为XML,然后将XML的响应解组回Java对象。而且你必须编写所有代码。如果您误解了文档,您将构建错误的内容,并且第一次无法正常工作。你将不得不再次阅读文档,调整你的XML,调试它,再试一次,重复直到工作,等等。这是徒劳的!

如果您可以使用工具为您生成代码,那么您是否可以专注于需要完成的实际业务而不是浪费时间使用XML?输入WSDL。

WSDL 是一种描述SOAP Web服务的方法。它是签名,参数名称和类型,限制和文档,一体化。它有用的是你可以将它提供给一个工具,并让工具从中生成代码,为你处理XML编组/解组,并将方法和对象公开给你的Java代码。

现在 REST 是一个不同的野兽。要调用RESTful Web服务,您需要“说出它的语言”,没有“协议”可以遵循。客户需要了解MIME types才能使用该服务。这主要是您必须阅读和理解的文档,然后构建代码。因为这也是样板代码,所以与SOAP WSDLs提供的功能一起使用的人决定为REST创建类似的东西。这是WADL。

WADL 与REST的目的相同,就像WSDL为SOAP所做的那样(注意,REST不仅仅是一种不同的SOAP方式,所以当你尝试用REST做同样的事情时,那就是你使用SOAP,只需将RESTful Web服务 - which is hypermedia driven - 减少到WebAPI即可。

至于创建WSDL和WADL的方法,如果你有知识(称为“contract-first”),你可以手动完成,或者你可以使用JAX-RSJAX-WS框架,首先编写服务并让框架自动为您生成WSDL(这称为“contract-last”)。

答案 1 :(得分:0)

只需几点。

严格来说,RESTful Web服务不是服务。 这只是看你与服务器的互动。

早期有一个RPC(远程过程调用),因此重点是根据名称,参数等描述远程方法。 当XML Schema进入场景时,我们只需发送一个XML"文档"而不是定义参数。方法(文档样式)。 Java将参数映射到XML文档(JAX-WS),这是最推荐的#34;用Java(文档/文字)样式做WS的方法。

在REST中没有服务,但是可以创建/读取/更新/删除(CRUD)的资源。 在大多数情况下,使用HTTP协议。

WSDL 1.1是一个"事实上的"描述WS的标准和Java支持的标准。 WSDL 2.0是标准,但没有得到业界的大力支持。

请注意,WSDL可用于通过http绑定描述HTTP服务(而不是资源!)。 WSDL 1.1受限于HTTP术语支持(仅限GET和POST),而WSDL 2.0支持所有HTTP操作。

WADL是SUN Microsystems为REST创建一种WSDL的提议。 WADL要简单得多。

所以区别在于远程执行(WS / WSDL)与资源(REST / WADL)。

关于Java。 如果使用JAX-WS对服务进行编程,通常不需要手动创建WSDL,因为JAX-WS会自动从代码中生成它。

JAX-WS不支持WSDL 2.0 - 您可以使用Apache Woden来解析它或使用tinyWSDL来解析/生成。 http://ws.apache.org/woden/ http://sourceforge.net/projects/tinywsdl/

还有一个java WADL项目可以使用WADL(不能发布2个以上的链接)

干杯,

d