开发WebService的两种方式(java语言)
这里是主要是以java语言为例子来演示的。
第一种是使用jdk来开发。第二种是使用CXF框架来编写的。
1 、使用jdk来开发
注意:使用JDK开发(1.6及以上版本)
整个工程目录如下
1.1 、首先创建WebService服务器
第一步:定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法
package com.ws;
import javax.jws.WebService;
@WebService
public interface HelloWS {
@WebMethod
public String add(String name);
}
第二步:编写interface的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法
package com.ws;
import javax.jws.WebService;
@WebService
public class HelloWSImpl implements HelloWS {
public String add(String name) {
System.out.print("有用户访问"+name);
return name;
}
}
第三步:使用Endpoint(终端)类发布webservice
package com.ws.service;
import javax.xml.ws.Endpoint;
import com.ws.HelloWSImpl;
public class ServerTest {
public static void main(String[] args) {
String address="http://localhost:8080/WS_day_01/HelloWS/sayHello";
Endpoint.publish(address, new HelloWSImpl());
System.out.println("发布成功");
}
}
发布完成之后在自己的控制台输出如下:
好了。到目前为止WebService的服务器端就写完代码了。
说明:1、在HelloWS接口类里面的add方法。就是方便客户端去调用。
第四步:验证是否成功。
在自己的浏览器地址栏输入自己刚刚发布的地址,最后加上?wsdl。
1.2 客户端的实现
第一步:使用jdk的wsimport -keep 工具生成客户端代码
说明:1、wsimport 位于C:\Program Files\Java\jdk1.8.0_171\bin下。就是自己电脑上java的安装目录
如果打开cmd窗口。输入命令wsimport出现wsimport 不是内部或外部命令,也不是可运行的程序或批处理文件
解决办法 https://blog.csdn.net/sdddlll/article/details/81189111 就可以解决。
2、http://localhost:8080/WS_day_01/HelloWS/sayHello这个地址是自己服务器端发布的地址。
3、在wsimport命令输入之前首先发布自己的webService。才可以运行。
第一步生成的客户端的代码如下:
第二步:写客户端的类:
package com.ws.test;
import com.ws.HelloWSImpl;
import com.ws.HelloWSImplService;
/**
* 类描述:
*@author: 冯冬冬
*@date: 日期:2018-7-24 时间:下午7:17:14
*/
public class ClientTest {
public static void main(String[] args) {
HelloWSImplService factory=new HelloWSImplService();
HelloWSImpl helloWS=factory.getHelloWSImplPort();
System.out.print(helloWS.add("23456"));
}
}
第三步:查看结果如下
2 使用CXF框架来编写
2.1 什么是CXF框架?
2.1.1、由来
1)Axis --> Axis2;
XFire(Web service框架) + Celtrix(ESB框架) = CXF
2.1.2、下载:
1)官网地址下载:http://cxf.apache.org/download.html
2)CXF目录:这边是 apache-cxf-2.7.8
①、bin:提供的是常用的dos控制台命令工具。如wadl2java等等
②、docs:帮助文档
③、lib: jar包、依赖库
④、modules:CXF模块jar包
⑤、samples:例子
2.1.3、特性:
1)有代码生成工具:
Java to WSDL;WSDL to Java;XSD to WSDL;WSDL to XML;WSDL to SOAP;WSDL to Service
2)支持特性:
①、支持 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;
②、支持 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;
③、支持 WSDL 1.1 、2.0;
④、支持 MTOM;、JavaScript
⑤、通过 Yoko 支持 CORBA;
⑥、通过 Tuscany 支持 SCA;
⑦、通过 ServiceMix 支持 JBI;
⑧、内置Jetty应用服务器;
2.2 如何使用CXF框架。
(一)、要求的jar 包
1、CXF版本为 cxf-2.7.8.jar ,其他版本可能会有出入。
2、需要的jar包为:
3、因为使用main函数启动发布,所以需要 jetty 包。
4、出现Cannot create a secure XMLInputFactory异常提示时通常是少了woodstox-core-asl-4.2.0.jar或stax2-api这两个包,少这两个包服务能够启动成功,且浏览器访问wsdl正常;但客户端连接web service时就出现错误提示了。加入后可能还需要重启下eclipse。
相关jar包资源地址为:https://download.csdn.net/download/sdddlll/10566640
2.3 使用CXF开发服务器端
形式和JDK方式的一样。只有一点不一样。那就是要把刚刚下载好的jar包导入服务器端和客户端的lib目录下。
从左边的这个目录可以看到。此时再次运行服务器。结果如下
2.4 使用CXF开发客户端
整个客户端的工程目录同上:
第一步:将下载好的Apache-cxf-2.5.9的bin目录添加到系统变量的path路径下
第二步:在cmd命令环境中客户端的src目录下输wsdl2java http://localhost:8080/WS_day_01/HelloWS/sayHello?wsdl
就相当于使用cxf工具生成了可客户端代码
第三步:测试。测试结果与JDK测试结果相同。
好了,写到这里就把基本的jdk的实现方式和CXF的实现方式都跑了一遍。但是CXF有很多的优点。在上面也已经总结了。所以在以后的学习中,也主要使用CXF框架的方式来实现。
下一篇。将稍微深入一下。通过天气预报的接口实现自己的案例。