jdk发布webservice服务(二)

1.使用JAX-WS开发webservice

    JAX-WS  的全称为 Java API for XML-Based Webservices ,从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本,本教程我们使用jdk1.7.0_07开发。

那么如何才可以发布一个WebService呢?

1:用Jdk1.6.0_13以后的版本发布一个WebService服务,并通过地址栏查看它的wsdl文档.
2:通过wsimport生成客户端代码,调用并查看运行的结果.(学会如何调用是我们的重点).
3:从互联网上获取一个WebService网络公开的服务,并使用工具生成客户端,调用并查看结果。

 

测试代码包括服务端和客户端的开发
1.3.1 服务端开发:
代码:

其中:
1、编写SEI(Service Endpoint Interface),为了开发方便我们用java类代替接口加实现类的方式。
2、java类中至少要有一个非静态的公开方法需要作为webservice服务方法。
3、public class WeatherServer上边要加上@WebService,表示webservice的发布类。
4、使用Endpoint.publish()方法发布服务。

2 学会看懂使用说明书(wsdl)

1、在地址栏输入(注意后面的参数?wsdl)
http://127.0.0.1:8888/weather?wsdl
2、这里注意目前不是访问webService,只是获取一个用于描述WebService的说明文件,即:wsdl文件,我们需要看懂wsdl的文件,这样就知道服务端究竟发布什么样的服务,提供什么样的方法,需要传递什么类型的参数,方法的返回值类型是什么等。.
3、wsdl- 即WebServiceDescriptionLanguage,是以XML文件形式来描述WebService的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务。

这里从下向上看:
其中:
1:WeatherServerService为视图服务
2:WeatherServerPort为调用的端口,即getWeatherServerPort()方法
3:WeatherServer为接口,接口中提供一个queryWeather()的方法

3 客户端开发:

wsimport是jdk自带的,可以根据wsdl文档生成客户端调用代码的工具.当然,无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码.服务器端用什么语言编写的并不重要.
wsimport.exe位于JAVA_HOME\bin目录下.
例如:在cmd的窗口下执行wsimport可以看到

常用参数为:

-keep:是否生成Java源文件

-d:指定.class文件的输出目录

-s:指定.java文件的输出目录

-p:定义生成类的包名,不定义的话有默认包名

-verbose:在控制台显示输出信息

-b:指定jaxws/jaxb绑定文件或额外的schemas

-extension:使用扩展来支持SOAP1.2
示例:
wsimport其他参数说明,我们经常使用的参数为-d,-s,-p
-d<目录>将会生成.class文件.
示例:wsimport –d .
http://127.0.0.1:8888/weather?wsdl

-s<目录>将会生成.java文件.
示例:wsimport –s .
http://127.0.0.1:8888/weather?wsdl

-p<包名>将生成的文件(.java或是.class修改成指定的包名)
示例:wsimport -s . -p cn.itcast
http://127.0.0.1:8888/weather?wsdl

 

 

使用wsimport命令生成webService客户端代码实例

原文 
http://blog.csdn.net/aqsunkai/article/details/51711087

示例:
C:/> wsimport –s .
http://127.0.0.1:8888/weather?wsdl

注意:-s不能分开,-s后面有个小点

在cmd的窗口执行:

在D盘ws的文件夹下看到客户端生成的java文件:

将.java的文件整个包拷贝到客户端的工程下,然后使用WeatherClient的客户端测试,测试代码如下:

其中WeatherServiceService为服务器类
其中WeatherServer为接口类
其中getWeatherServerPort为端口类型
其中queryWeather为调用的方法

这四个参数在wsdl的使用说明书中都会看到。
<service name=”WeatherServerService”>通常用于描述服务的名称,即new WeatherServerService ();-通常称为服务名。
在<Service>元素内的<port name=”WeatherServerPort”>即new WeatherServerService ().getWeatherServerPort (); – 通常称为服务端口。
<portType name=”WeatherServer”>是服务接口名。即:
WeatherServer weatherServer = new WeatherServerService ().getWeatherServerPort ();

在myeclipse上查看.wsdl文件:如图:可视化的webservice

 

1.4:网络练习
对于用户而言,用户是永远也感受不到你的程序具体是如何获取天气预报信息的.但他的确通过你的程序获取了天气信息,这对用户就已经足够了.但其实,对于程序员来说,程序员本身并没有做很多的工作,只是简单的调用了气象部门对外发布的服务从而获取了天气信息.
Webservice的网络网址:www.webxml.com.cn
1.4.1:手机归属地
1:下面实现一个手机号归属地的查询:大家可以回家试下:
(1):在E盘下,写一个phone.wsdl文件(从资料webservice\提供资料\网上手机+天气\中获取),内容就是网络发布的使用说明书
(2):,生成客户端代码
注意:使用jaxws提供的wsimport生成客户端,这里先强调jaxws只能编译soap1.1的协议,不能编译soap1.2的协议的代码。
(3):客户端调用代码

1.4.2:天气预报
下面实现一个天气预报的查询:
(1):在E盘下,写一个weather.wsdl文件(从资料webservice\提供资料\网上手机+天气\中获取),内容就是网络发布的使用说明书
(2):,生成客户端代码
注意:使用jaxws提供的wsimport生成客户端,这里先强调jaxws只能编译soap1.1的协议,不能编译soap1.2的协议的代码。
(3):客户端调用代码

 

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *