使用JAVA开发WebService服务
1、概述
WebService分为两种:
- 基于HTTP协议,REST方式的WebService。
- 基于SOAP协议(HTTP协议之上),RPC方式的WebService。 通常所说的WebService是指RPC方式的WebService。
Java中有三种WebService规范: JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。
2、JAX-WS
JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。
如何发布一个Web服务:
①在类上添加@WebService注解 ,此注解指定将此类发布成一个WebService;(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)
②通过EndPoint(端点服务)发布一个WebService,此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布。(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于javax.xml.ws.Endpoint包中)
③类上添加注解@WebService,类中所有非静态方法都会被发布; 静态方法和final方法不能被发布;方法上加@WebMentod(exclude=true)后,此方法不被发布;
例
(1)发布WebService服务
HelloWebService.java:
package cn.tgb.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class HelloWebService {
public String HelloWord(String name){
return "Hello: "+name;
}
/*
*添加exclude=true后,HelloWord2()方法不会被发布
*/
@WebMethod(exclude=true)
public String HelloWord2(String name){
return "Hello: "+name;
}
public static void main(String[] args) {
/*
*参数1:服务的发布地址
*参数2:服务的实现者
*/
Endpoint.publish("http://192.168.24.138:456/helloWord",new HelloWebService());
}
运行以上程序进行发布。
(2)查看wsdl
地址:http://192.168.24.138:456/helloWord?wsdl
只要在客户端浏览器能看到此WSDL文档,说明服务发布成功
(3)在客户端访问发布的服务
根据WSDL文档来在客户端编写代码,访问发布的服务;但是,WSDL文档看不懂怎么办?代码该如何编写?
——你看不懂,JDK看得懂,wsimport是JDK自带的,可以根据WSDL文档生成客户端调用代码的工具。无论服务器端WebService使用什么语言编写的,都将在客户端生成Java代码。所以服务器用什么语言编写的并不重要。
wsimport.exe命令参数:
-d:生成class文件。默认参数。
-s:生成Java文件 -p:自定义包结构
解析地址生成源码到当前目录:
执行以上命令后,即可在当前目录下生成如下包及类:
还可以自定义包结构:
将生成的包及.java文件复制到客户端:
创建访问服务的类:MyClient.java:
MyClient.java:
package cn.tgb.ws;
public class MyClient {
public static void main(String[] args) {
HelloWebServiceService hwss = new HelloWebServiceService();
HelloWebService hws = hwss.getHelloWebServicePort();
String result = hws.helloWord("hanxuemin");
System.out.println(result);
}
(4)运行结果:
完。