什么是Web Service?
可以使用Web Service这种技术实现SOA的思想,就像借助Java实现面向对象的思想。
Web Service实现的是机器与机器之间的互通,即只要是基于web service提供的服务的机器,都可以非常方便的进行服务功能的互相访问,相当于在机器之间搭建了一个通用的同学平台。通过Web Service, .Net平台和Java EE 平台可以方便的实现互通。同时可以为用户提供更高层次、更方便的资源共享,如分布式计算等。
例子:
从Java SE 6.0开始,JavaSE提供了支持Web Service开发的工具包,基于它可以快速开发出Web Service。
- 环境:使用的环境是Java SE 8.0。
- 功能:实现一个接受用户姓名输入,返回一个数值的功能。
- 步骤如下:
- 创建Web Service实现类
创建一个Java类,其名称为MyLuckTestWebService,如下
- 创建Web Service实现类
package com.company;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* Created by ling on 2015/4/23.
*/
@WebService //注解,通知系统所创建的一个类会作为一个Web Service发布
public class MyLuckTestWebService {
//定义Web Service中的服务方法
public String calLuck(String customer) {
return customer + " , 您今日的幸运指数为:" + (int)(Math.random() * 100);
}
public static void main(String[] args) {
//指定URL和服务实现类并发布
Endpoint.publish("http://localhost:8080/MyWebServices/MyLuckTestWebService",new MyLuckTestWebService());//
System.out.print("Web servise starting");
}
}
编译并生成Web service
编译MyLuckTestWebService.java源文件,在当前路径打开cmd,输入
吗
wsgen命令将对Web Service类自动进行包装,生成所需要的辅助类,执行该命令后会生成一个jaxws文件夹发布Web Service
运行MyLuckTestWebService类,发布WS
开发客户端辅助类
在开发客户端之前,需要为客户端生成一线访问对应的辅助类。在客户端的路径下的cmd中输入wsimport命令,将在目录下创建一个辅助类的目录。
使用wsimport命令是输入的“”http://localhost:8080/MyWebServices/MyLuckTestWebService?wsdl”,这是Web Service的WSDL文件的URL地址。
每个Web Service在使用wsgen生成并发表后都会产生一个WSDL文件,这个XML文件告诉外界该WS都有什么样的功能。根据WSDL就能编写调用WS的客户端。开发客户端代码
package com.company;
import java.lang.String;
import java.net.URL;
import javax.jws.*;
import javax.xml.ws.*;
import java.net.*;
import javax.xml.namespace.*;
public class MyLuckTest_Client {
public static void main(String[] args) throws Exception {
URL wsURL = new URL("http://localhost:8080/MyWebServices/MyLuckTestWebService?wsdl");
//使用动态服务
QName qn = new QName( "http://company.com/", "MyLuckTestWebServiceService"); //服务名称
Service service = Service.create(wsURL, qn); //动态服务
MyLuckTestWebService wsemPort = service.getPort(MyLuckTestWebService.class);
System.out.println(wsemPort.calLuck("TOM"));
MyLuckTestWebServiceService wsems = new MyLuckTestWebServiceService();//静态服务
wsemPort = wsems.getMyLuckTestWebServicePort();
System.out.println(wsemPort.calLuck("Jack"));
}
}
- 编译运行客户端
将其编译运行,其输出结果如图所示
遇到的问题:
1、出现Exception in thread “main” java.lang.NoClassDefFoundError错误。
- 原因:创建Web Service包含了包层次
- 解决:在执行Java命令时,要按照上述包层次,相应的创建目录层次,把上面生成的.class文件放到 /当前目录/com/company 目录下。.java文件在当前目录下。
2、出现Exception in thread “main” java.lang.UnsupportedClassVersionError错误
- 原因:环境配置问题
- 解决:重新配置JAVA环境