分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

WebService系列二:使用JDK和CXF框架开发WebService

发布时间:2023-09-06 01:51责任编辑:沈小雨关键词:Web

一、使用JDK开发WebService

服务端程序创建: 

1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer

 2. 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法

 1 package com.study.webservice.ws; 2 ?3 import javax.jws.WebMethod; 4 import javax.jws.WebService; 5 ?6 /** 7 ?* 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法 8 ?* 9 ?*/10 //使用@WebService注解标注IWebService接口11 @WebService12 public interface IWebService {13 14 ????//使用@WebMethod注解标注IWebService接口中的方法15 ????@WebMethod16 ????String sayHello(String name);17 ????18 ????@WebMethod19 ????String save(String name,String pwd);20 }

 3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法

package com.study.webservice.ws.impl;import javax.jws.WebService;import com.study.webservice.ws.IWebService;/** * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法 * *///使用@WebService注解标注IWebService接口的实现类WebServiceImpl@WebServicepublic class WebServiceImpl implements IWebService { ???@Override ???public String sayHello(String name) { ???????System.out.println("WebService sayHello "+name); ???????return "sayHello "+name; ???} ???@Override ???public String save(String name, String pwd) { ???????System.out.println("WebService save "+name+", "+pwd); ???????return "save Success"; ???}}

 4. 使用Endpoint(终端)类发布webservice

package com.study.webservice.ws.publish;import javax.xml.ws.Endpoint;import com.study.webservice.ws.impl.WebServiceImpl;/** * 使用Endpoint(终端)类发布webservice * */public class WebServicePublish { ???public static void main(String[] args) { ???????//定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx ???????//String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的 ???????//String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的 ???????String address = "http://192.168.152.1:8989/WS_Server/Webservice"; ???????//使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用 ???????Endpoint.publish(address , new WebServiceImpl()); ???????System.out.println("发布webservice成功!"); ???}}

 6. 启动主程序WebServicePublish,效果如下

7.在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

客户端程序创建: 

 1. 新建一个JDK开发webservice的客户端maven项目JDKWebServiceClient

2. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

3. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

 打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

  4. 借助生成的代码编写调用WebService对外提供的方法

package com.study.webservice.ws.client;import com.study.webservice.ws.impl.WebServiceImpl;import com.study.webservice.ws.impl.WebServiceImplService;/** * 调用WebService的客户端 * */public class WSClient { ???public static void main(String[] args) { ???????//创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的 ???????WebServiceImplService factory = new WebServiceImplService(); ???????//通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的 ???????WebServiceImpl wsImpl = factory.getWebServiceImplPort(); ???????//调用WebService的sayHello方法 ???????String resResult = wsImpl.sayHello("小不点"); ???????System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult); ???????System.out.println("---------------------------------------------------"); ???????//调用WebService的save方法 ???????resResult = wsImpl.save("小不点","123"); ???????System.out.println("调用WebService的save方法返回的结果是:"+resResult); ???}}

5. 启动客户端主程序WSClient,效果如下

二、使用CXF框架开发WebService

服务端程序创建: 

1.新建一个使用CXF框架开发webservice的服务端maven项目CXFWebServiceServer

2. 在pom.xml中引入相关依赖

 ?<properties> ???<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ???<cxf.version>3.1.4</cxf.version> ???</properties> ?<dependencies> ????<dependency> ?????????????<groupId>org.apache.cxf</groupId> ?????????????<artifactId>cxf-rt-frontend-jaxws</artifactId> ?????????????<version>${cxf.version}</version> ?????</dependency> ???????????<dependency> ?????????????<groupId>org.apache.cxf</groupId> ?????????????<artifactId>cxf-rt-transports-http</artifactId> ?????????????<version>${cxf.version}</version> ?????</dependency> ?????????????????????????????????<!-- 使用cxf内置的jetty服务器发布WebService --> ?????<dependency> ?????????????<groupId>org.apache.cxf</groupId> ?????????????<artifactId>cxf-rt-transports-http-jetty</artifactId> ?????????????<version>${cxf.version}</version> ?????</dependency> 

 2. 定义一个接口,使用@WebService注解标注接口

package com.study.webservice.ws;import javax.jws.WebService;/** * 定义一个接口,使用@WebService注解标注接口 * *///使用@WebService注解标注IWebService接口@WebServicepublic interface IWebService { ???String sayHello(String name); ???????String save(String name,String pwd);}

 3. 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法,注意代码标红色的地方

package com.study.webservice.ws.impl;import javax.jws.WebService;import com.study.webservice.ws.IWebService;/** * 编写接口的实现类,使用@WebService注解标注实现类,实现接口中定义的所有方法 * *///使用@WebService注解标注IWebService接口的实现类WebServiceImpl@WebService(serviceName = "IWebService",endpointInterface = "com.study.webservice.ws.IWebService")public class WebServiceImpl implements IWebService { ???@Override ???public String sayHello(String name) { ???????System.out.println("WebService sayHello "+name); ???????return "sayHello "+name; ???} ???@Override ???public String save(String name, String pwd) { ???????System.out.println("WebService save "+name+", "+pwd); ???????return "save Success"; ???}}

 4. 使用CXF的JaxWsServerFactoryBean发布webservice

package com.study.webservice.ws.publish;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;import com.study.webservice.ws.IWebService;import com.study.webservice.ws.impl.WebServiceImpl;/** * 使用CXF的JaxWsServerFactoryBean发布webservice * */public class WebServicePublish { ???public static void main(String[] args) { ???????//定义WebService的发布地址,这个地址就是提供给外界访问Webervice的URL地址,URL地址格式为:http://ip:端口号/xxxx ???????//String address = "http://192.168.152.1:8989/";这个WebService发布地址的写法是合法的 ???????//String address = "http://192.168.152.1:8989/Webservice";这个WebService发布地址的是合法的 ???????String address = "http://192.168.152.1:8989/WS_Server/Webservice"; ???????//使用Endpoint类提供的publish方法发布WebService,发布时要保证使用的端口号没有被其他应用程序占用 ???????/*Endpoint.publish(address , new WebServiceImpl());*/ ???????????????JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); ???????factory.setServiceClass(IWebService.class); ???????//服务发布地址 ???????factory.setAddress(address); ???????factory.setServiceBean(new WebServiceImpl()); ???????factory.create(); ???????????????System.out.println("发布webservice成功!"); ???}}

 5. 启动服务端主程序WebServicePublish

6. 在浏览器中输入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice发布成功

客户端程序创建: 

 1. 新建一个使用CXF框架开发webservice的客户端maven项目CXFWebServiceClient

2. 在pom.xml中引入相关依赖

 ?<properties> ???<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ???<cxf.version>3.1.4</cxf.version> ??</properties> ?<dependencies> ??????<dependency> ?????????????<groupId>org.apache.cxf</groupId> ?????????????<artifactId>cxf-rt-frontend-jaxws</artifactId> ?????????????<version>${cxf.version}</version> ?????</dependency> ???????????<dependency> ?????????????<groupId>org.apache.cxf</groupId> ?????????????<artifactId>cxf-rt-transports-http</artifactId> ?????????????<version>${cxf.version}</version> ?????</dependency> ?

3. 借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下

4. 执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

 打开命令行窗口,切换到src/main/java目录,执行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客户端代码,如下图所示:

  5. 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端

package com.study.webservice.ws.client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import com.study.webservice.ws.IWebService;/** * 使用CXF的JaxWsProxyFactoryBean调用WebService的服务端 * */public class WSClient { ???public static void main(String[] args) { ???????JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean(); ???????jwpfb.setServiceClass(IWebService.class); ???????String address = "http://192.168.152.1:8989/WS_Server/Webservice"; ???????jwpfb.setAddress(address); ???????IWebService hs = (IWebService) jwpfb.create(); ???????//调用WebService的sayHello方法 ???????String resResult = hs.sayHello("小不点"); ???????System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult); ???????System.out.println("---------------------------------------------------"); ???????//调用WebService的save方法 ???????resResult = hs.save("小不点","123"); ???????System.out.println("调用WebService的save方法返回的结果是:"+resResult); ???}}

 6.启动客户端主程序,效果如下:

源代码获取地址:

https://github.com/leeSmall/WebService

参考文章:

http://www.cnblogs.com/xdp-gacl/p/4259481.html

https://www.cnblogs.com/luangeng/p/6575061.html

WebService系列二:使用JDK和CXF框架开发WebService

原文地址:https://www.cnblogs.com/leeSmall/p/8969802.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved