【www.gdgbn.com--WebService】

1.安装eclips教程e

         需要安装eclipse v3.3或者以上版本,而且满足javaee开发。如果没有去http://www.eclipse.org下载javaee开发版本的eclipse ide(比如:eclipse-jee-helios-sr1-win32.zip)。解压到路径c:eclipse.然后在桌面创建快捷方式。并创建默认工作空间c:workspace.运行eclipse并转到javaee开发透视图下:

 

         eclipse的bug提示:在eclipse3.3.1中有一个严重的bug:当在可视化环境下编辑wsdl文件时eclipse会提示outofmemoryerror错误。若修复这个bug,请按照下面方式修改文件:c:eclipseeclipse.ini:

 

 

2.安装axis2

         接下来,去http://ws.apache.org/axis2下载”standard binary distribution”(比如:axis2-1.5.4-bin.zip).解压到c:axis。切换到目录c:axisbin下运行axis2server.bat将启动axis服务器。你将看到如下画面:

 

            打开浏览器并访问地址http://localhost:8080/ 你将看到如下画面:

 

 

这说明在axis服务上已经存在了一个名称为”version”的web service。单击”version”连接你将看到它的wsdl文件:

 

3.在eclipse上安装axis2插件

         去http://ws.apache.org/axis2/tools/index.html下载代码生成插件(code generator 比如:axis2-eclipse-codegen-plugin-1.5.4.zip)。把它解压到c:eclipseplugins文件夹下面。重启eclipse如果需要。检验是否安装成功,选择菜单”file|new|other”看是否有”axis2 code generator”选项:

 

4.web service的wsdl文件

         假如你想创建一个在第一章描述的web service:

 

            用wsdl语言来描述,应该是这样的:

 

         上面定义了schema和port type。下面我们来定义binding和port:

  

 

         实际上,在soap 的binding中,你可以指定更详细的信息:

  

 

5.rpc类型的web service (版本一)

         如果创建的web service是rpc类型的,那么wsdl文件应该是这样的:

  

 

         因为rpc类型web service不是实践中最好的选择。建议使用文档类型(document style)的版本

6.以可视化方式创建wsdl

         以手写方式创建wsdl文件容易出错误。幸运的是,在eclipse中可以在可视化方式下进行wsdl的创建。首先,在eclipse中创建一个名称为simpleservice的java工程:

 

         在创建工程的过程中,保证对于源代码和类文件使用不同的文件夹。然后继续完成工程的创建。接下来,右键单击工程并选择菜单”new|other”,然后选择”web services|wsdl”:

 

 

         如果你没有看到这个选项,说明你没有安装javaee版本的eclipse。如果正常工作,单击”next”并输入simpleservice.wsdl作为文件名:

 

         单击”next”,接着安装下图图示输入:

 

         单击”finish”,你将会得到如下画面:

 

 

         这是wsdl的代码文件表现形式。如果要进行可视化编辑,单击编辑器窗口底部的”design”标签。你看到:

 

         双击endpoint将其改为http://localhost:8080/axis2/services/simpleservice:

 

 

         双击operation将其改为”concat”:

 

 

         现在,input part 是一个元素(element).让我们把其改为.把鼠标光标移动到图像右边缘的箭头上,箭头会变成蓝颜色。光标停留几秒钟,会出现一个元素定义的窗口:

 

 

         单击其他地方窗口会消失。为了编辑schema 定义(比如:在这里是指元素的定义),单击蓝色箭头。一个新的编辑器窗口会出现:

 

         如果要想可视化(图形化)方式编辑,单击编辑器底部的”design”标签,你将会看到:

 

         双击”in”把其改为”s1”:

 

 

         右键单击(concattype)选择”add element”并把名字设置为”s2”:

 

 

         默认情况下元素类型被设置为string(比如:元素s1,s2)。如果要更改元素类型,双击其类型会出现一个下拉列表选择框可以选择合适的元素类型:

 

         如果你想让s2在s1之前显示,可以把其选中拖放在s1前面:

 

         现在,还是保持s1在s2之前显示。接下来右键单击元素,并选择”refactor|rename”,把其名称改为concatrequest:

 

 

         现在已近完成了对元素的设置。现在返回到wsdl编辑器开始对response message进行设置。目前,元素如下图所示:

 

         如上图所示,concatresponse是一个包含了元素的元素:

        

                   abc

        

         然而,在接口设计的时候,response是一个简单类型的元素,而不是一个复杂类型元素:

 

         那么如何更改concatresponse的类型呢?右键单击选择”set type|browse”:

 

 

         选择”string”:

 

 

         成功更改后,concatresponse会变成下图所示:

 

         好了,现在让我们查看一下整个schema,单击左上角的图标:

 

 

         你将看到:

 

 

         看起来不错吧?o(∩_∩)o~。现在,保存下文件吧!

7.验证wsdl 文件

         为保证wsdl文件遵守各种web service标准,接下来我们对其进行验证。验证操作非常简单:右键单击simpleservice.wsdl文件选择”validate”. 如果有任何错误,会在问题窗口显示。比如,这里我引入了一个错误在simpleservice.wsdl文件中:

 

 

8.生成一个service stub

         接下来,为了实现这个web service,需要生成一个 “service stub”(见下图)。当一个请求消息到来时,service stub 会把xml元素转换为一个concatrequest java对象。然后,concatrequest对象被传递给concat()方法,concat()方法在service skeleton中(service skeleton 需要你来提供).concat()方法会创建一个concatresponse java对象并将其返回。service stub 获得concatresponse对象并把它转化为一个xml元素然后再把这个xml元素返回给客户端:

 

         以上对原理进行了简单的介绍,接下来我们进行实践操作。在eclipse中选择菜单”file|new|other” 并选择”axis2 code generator”(见下图).默认是从wsdl文件生成java代码。默认选择正是我们所要选择的:

 

         单击”next”(见下图).单击”browse”定位到simpleservice.wsdl文件:

 

         单击”next”(见下图).像下面一样设置每个选项:

 

            注意namespace是如何默认映射为java 包的。比如,simpleservice的port type在命名空间http://ttdev.com/ss中,映射到java包结构为com.ttdev.ss:

 

         当然,这只是默认的映射方式。在上面的对话框中可以自定义java包结构。但是对于我们来说默认的映射也比较合理。接下来单击”next”并输入以下信息:

 

         单击”finish”.邮件单击工程文件夹选择”refresh”.然后你将看到以下一些生成的文件:

 

         java 源代码文件会提示很多错误,这是因为这些源代码会引用到axis2的jar文件但是目前这些文件不在build path中。所以,打开build path 对话框并单击”add jars”按钮:

 

         选择工程中”lib”文件夹下的所有的jar 文件:

 

         这时,所有的提示错误都会消失掉。o(∩_∩)o~

 

9.实现web service

         要实现web service,需要更改simpleserviceskeleton.java文件,这个文件即service skeleton:

 

         concatrequest类和concatresponse类从哪里得来的呢?它们是由axis2 code generator生成的:

 

 

10.部署web service

         在axis2服务器中,部署web service,只需要按照下图进行文件的拷贝就可以了:

 

         现在,通过运行:c:axisbinaxis2server.bat文件启动axis2服务器。你应该看到服务器已经获得了simpleservice :

 

         打开浏览器,在地址栏输入http://localhost:8080 你将看到simpleservice:

 

         若要查看simpleservice的wsdl文件,只需要单击”simpleservice” 链接即可:

 

 

11.通过客户stub创建一个客户端

         若访问一个web service, 需要使用axis2的代码生成工具生成一个”client stub”(客户 stub).当访问web service中的一个方法时,stub 会把你程序中的java 对象数据转化为适当的格式(xml格式的soap),并在soap中创建请求消息,然后通过internet使用适当的传输协议 (http)把其(soap)发送到正确的endpoint(端点).当有响应到来时,stub把xml格式的消息再转化为java对象数据,并将其返回给你。

 

         按照以下步骤生成客户stub。运行axis2 code generator 向导直到看到下图所示的步骤。这次选中生成客户端代码(generate client side code):

 

         然后选择把生成的代码输出到simpleservice 工程。

 

         单击”finish”并刷新工程。你将看到一些新生成的java 类文件:

 

         在上图的类文件中,simpleservicestub.java 是客户stub。这就好比你模仿他人访问你的自己的web service一样,他人不可能把客户端代码和web service的实现代码混在一起。因此,把客户端代码放到单独的包中,比如com.ttdev.ss.client.

         接下来,在com.ttdev.ss.client包中创建simpleclient.java类文件:

        

 

         运行它,会获得如下输出:

 

12.卸载web service

         如果要卸载web service。只需要把simpleservice文件夹删除即可:

 

         即使在axis2 服务器运行的时候,删除文件夹操作一样正常工作。服务器会提示文件夹被删除和service被成功卸载。

 

         如果把删除的service文件夹复原。axis2 服务器会立刻重新部署:

 

这就是所谓的”hot deployment””(热部署)。

13.本章总结

         tomcat承载了一个或者多个web application。axis 服务器可以作为一个web application安装到tomcat中。axis可以承载一个或者多个web service。

         普遍情况下,输入消息和输出消息是以soap消息传送的。一个soap消息总是一个元素。其中可能包含一个

元素,是由一个或多个头结点或者头元素组成。必须包含一个元素,是由一个或多个body节点或元素组成。对于文档类型的web service,通常仅有一个输入消息部分(input message part)作为一个单一的body入口。对于rpc类型的web service,元素通常包含所有的消息部分(message parts)作为一个单一的body 节点。

         创建一个web service,首先要创建一个wsdl文件用来描述web service的接口。通常通过工具来创建wsdl文件,比如用eclipse。使用axis code generator向导通过wsdl文件生成服务器端stub。然后在service skeleton中填充自定义代码。服务器端stub 的作用是把请求消息中的xml元素转化为java对象数据,然后调用skeleton并把java 数据对象以xml元素返回,然后封装到相应消息(response message)中。

         部署一个web service,拷贝类文件和services.xml文件到axis2 服务器中要符合特定的文件结构。如果要卸载一个web service只要删除相应的web service 文件夹即可。axis2 服务器支持热部署。这意味着,可以在服务器运行中,部署和卸载web service。

         部署的web service的端点(endpoint)是:http://localhost:8080/axis2/services/%3cname-of-your-service>.

         访问一个web service,在相应的wsdl文件上运行axis code generator向导生成一个客户端stub。然后在自己的代码中创建一个client stub的实例,把其当作一个web service进行调用。客户端 stub将把java 数据对象转化为xml 元素,并以正确的格式创建请求消息,然后通过适当的传输协议把请求消息发送到正确的端点(endpoint),并把相应消息中的xml元素转化为java 数据对象返回

本文来源:http://www.gdgbn.com/asp/28969/