1,在Java项目中发布一个WebService服务:
如何发布?
——JDK1.6中JAX-WS规范定义了如何发布一个WebService服务;
(1)用jdk1.6.0_21以后的版本发布;
(2)与Web服务相关的类,都位于Javax.jws.*包中
@WebService——此注解用在类上指定将此类发布成一个WebService;
EndPoint——此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。
2,例子:
(1)发布WebService服务
HelloWebService.java:
1 <span style="font-family:KaiTi_GB2312;font-size:18px;">package cn.tgb.ws; 2 importjavax.jws.WebMethod; 3 importjavax.jws.WebService; 4 importjavax.xml.ws.Endpoint; 5 /** 6 * @WebService - 它是一个注解,用在类上指定将此类发布成一个ws. 7 Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。 8 9 * @author xuemin 10 * 11 */ 12 @WebService 13 public classHelloWebService { 14 15 publicString HelloWord(String name){ 16 return"Hello: "+name; 17 } 18 19 /** 20 *添加exclude=true后,HelloWord2()方法不会被发布 21 * @param name 22 * @return 23 */ 24 @WebMethod(exclude=true) 25 publicString HelloWord2(String name){ 26 return"Hello: "+name; 27 } 28 publicstatic void main(String[] args) { 29 /** 30 *参数1:服务的发布地址,这个地址就是提供给外界访问Webervice的URL地址 31 *参数2:服务的实现者 32 */ 33 Endpoint.publish("http://192.168.24.138:456/helloWord",new HelloWebService()); 34 35 } 36 37 }</span>
注:
@WebService- 它是一个注解,用在类上指定将此类发布成一个ws.
Endpoint –此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。
运行以上程序进行发布。
(2)查看wsdl
地址:http://192.168.24.138:456/helloWord?wsdl
只要在客户端浏览器能看到此WSDL文档,说明服务发布成功
以上服务发布成功;
总结:
如何发布一个Web服务:
a,在类上添加@WebService注解
(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)
b,通过EndPoint(端点服务)发布一个WebService
(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)
c,注:
类上添加注解@WebService,类中所有非静态方法都会被发布;
静态方法和final方法不能被发布;
方法上加@WebMentod(exclude=true)后,此方法不被发布;
(3)客户端访问发布的服务
根据WSDL文档来在客户端编写代码,访问发布的服务;
但是,WSDL文档看不懂怎么办?代码该如何编写?
——你看不懂,JDK看得懂,wsimport是JDK自带的,可以根据WSDL文档生成客户端调用代码的工具。无论服务器端WebService使用什么语言编写的,豆浆在客户端生成Java代码。所以服务器用什么语言编写的并不重要。
wsimport.exe命令参数熟知:
-d:生成class文件。默认参数。
-s:生成Java文件
-p:自定义包结构
解析地址生成源码到E盘:
执行以上命令后,即可在E盘下生成如下包及类
注:还可以自定义包结构:
自定义包结构的命令:
将生成的包及.java文件复制到客户端:如下图
创建访问服务的类:MyClient.java:
MyClient.java:
1 <span style="font-family:KaiTi_GB2312;font-size:18px;">package cn.tgb.ws; 2 3 public classMyClient { 4 5 publicstatic void main(String[] args) { 6 HelloWebServiceServicehwss = new HelloWebServiceService(); 7 8 HelloWebServicehws = hwss.getHelloWebServicePort(); 9 10 Stringresult=hws.helloWord("hanxuemin"); 11 System.out.println(result); 12 } 13 14 }</span>
(4)运行结果: