一.使用JDK编写WebService
1.开发WebService服务器端
@WebService注解接口,@WebMethod注解方法
package wangcc.webservice;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface WebServiceInterface {
@WebMethod
String sayHello(String name);
@WebMethod
String save(String name, String password);
}
编写一个实现该接口的类,依旧需要@WebService来注解这个类
package wangcc.webservice;
import javax.jws.WebService;
@WebService
public class WebServiceImpl implements WebServiceInterface {
@Override
public String sayHello(String name) {
// TODO Auto-generated method stub
System.out.println("WebService sayHello:" + name);
return "sayHello" + name;
}
@Override
public String save(String name, String password) {
// TODO Auto-generated method stub
System.out.println("WebService save" + "name:" + name + "password"
+ password);
return "name:[" + name + "]" + "password:[" + password + "]";
}
}
接下来我们需要来发布这个WebService,这里我们需要借助EndPoint
package wangcc.webservice.test;
import javax.xml.ws.Endpoint;
import wangcc.webservice.WebServiceImpl;
public class WebServicePublish {
public static void main(String[] args) {
String address = "http://127.0.0.1:8080/TheService";
Endpoint.publish(address, new WebServiceImpl());
System.out.println("PUBLISH SUCCESS!");
}
}
此时我们访问:http://127.0.0.1:8080/TheService,可以看到
访问 http://127.0.0.1:8080/TheService?wsdl,可以看到
我们可以看到wsdl文件中展示了很多有关WebService的信息。我们知道的,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受 的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都 能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
WSDL 文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。 WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
以上我们客户端的代码基本就编写完成了。
2.客户端:
下面我们来看客户端代码,首先新建一个Project :TheClient
首先我们需要使用wsimport命令行生成相关的客户端代码。
在工程目录下执行 wsimport -keep url(webService发布地址)
刷新我们新建的工程TheClient,我们发现自动生成了包以及一些java文件,这里我们主要需要要到最后的两个java文件
我们编写一个类来测试一下是否可以调用服务器端的函数。
package wangcc.webservice.TestClient;
import wangcc.webservice.WebServiceImpl;
import wangcc.webservice.WebServiceImplService;
public class WebServiceClient {
public static void main(String[] args) {
// 创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的
WebServiceImplService factory = new WebServiceImplService();
// 通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
WebServiceImpl wsImpl = factory.getWebServiceImplPort();
String responseResult = wsImpl.sayHello("KOBE BRYANT");
System.out.println("调用WebService的sayHello方法:返回的结果为:" + responseResult);
}
}