WebService系列二:使用JDK和CXF框架开发WebService
一、使用JDK开发WebService
服务端程序创建:
1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer

2. 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法
package com.study.webservice.ws; import javax.jws.WebMethod;
import javax.jws.WebService; /**
* 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法
*
*/
//使用@WebService注解标注IWebService接口
@WebService
public interface IWebService { //使用@WebMethod注解标注IWebService接口中的方法
@WebMethod
String sayHello(String name); @WebMethod
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
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. 使用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接口
@WebService
public 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的更多相关文章
- WEBSERVICE之CXF框架开发webservice
之前学习了使用jdk开发webservice服务,现在开始学习使用框架(cxf)开发webservice. 1.准备工作 A.使用cxf开发webservice服务,需要用到apache-cxf-3. ...
- 利用CXF框架开发webservice
开发服务端代码 1. web.xml文件中添加cxf的servlet 2. 定义接口 @WebService(targetNamespace="http://UserInfo.ws.com& ...
- Eclipse+CXF框架开发Web服务实战
一. 说明 采用CXF框架开发webservice. 所用软件及版本如下. 操作系统:Window XP SP3. JDK:JDK1.6.0_07,http://www.oracle.com/ ...
- 二十九、EFW框架开发的系统支持SaaS模式和实现思路
回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...
- BizTalk开发系列(二十四) BizTalk项目框架建议
Asp.NET有MVC框架,大部份的开发都是按照MVC进行的.BizTalk是面向消息的开发,不能完全采用分层的开发模式.而微软只提供了 BizTalk项目开发的基本策略,通过分析相关的Complex ...
- CXF Spring开发WebService,基于SOAP和REST方式 【转】
官网示例 http://cxf.apache.org/docs/writing-a-service-with-spring.html http://cxf.apache.org/docs/jax-rs ...
- CXF Spring开发WebService,基于SOAP和REST方式
版本CXF2.6.9 添加的包文件 这个版本的不可在Tomcat7上运行,会出错. 配置文件 applicationContext.xml <?xml version="1.0&quo ...
- WebService学习总结(二)--使用JDK开发WebService
一.WebService的开发方法 使用java的WebService时可以使用一下两种开发手段 使用jdk开发(1.6及以上版本) 使用CXF框架开发(工作中) 二.使用JDK开发WebServic ...
- 【WebService】使用JDK开发WebService(二)
WebService的开发手段 1.使用JDK开发(1.6及以上版本) 2.使用CXF框架开发(工作中) WebService的组成 1.服务器端 2.客户端 使用JDK开发WebService a. ...
随机推荐
- C++中的static 成员变量的一些注意点
C++中的static成员变量主要用来为多个对象共享数据 例: #include <iostream> using namespace std; class Student{ public ...
- Fluent UDF【6】:预处理命令
今天要讲的内容是关于C语言的预处理.搞清楚了这个,就可以分析UDF中的各种头文件源代码,从此写UDF不求人. 1 关于预处理 在UDF的各种头文件中(文件路径D:\Program Files\ANSY ...
- C++11 constexpr使用
C++11为了提高代码执行效率做了一些改善.这种改善之一就是:生成常量表达式,允许程序利用编译时的计算能力.假如你熟悉模板元编程,你将发现constexpr使这一切变得更加简单.constexpr使我 ...
- 2017-04-26 ios ipv6那些事(已完美解决)
2017-04-26 ios ipv6那些事(已完美解决) 工作单位性质属于外包公司,每天都有几十的app要提交上传至应用市场,于2017年3月份接到ios工程师反馈 Guideline 2.1 ...
- Spark SQL inferSchema实现原理探微(Python)【转】
使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择: (1)applySchema applySche ...
- EntityFramework安装和EF升级方法
例如:如何在vs2010上安装EntityFramework5.0? 首先,需要安装一个vs插件,名称为NuGet Package Manager,微软官方发布的,其作用就是为vs工程项目自动下载.安 ...
- linux和windows共享鼠标键盘
先说下原因,因为无线鼠标突然没电了,需要在两台PC间共享鼠标.好吧查找下方案,最后选择Synergy. Synergy 特别说明下,Synergy是开源软件,只是近期修改为下载付费模式. Synerg ...
- 内部排序比较(Java版)
内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法1.1 插入排序1.2 交换排序(冒泡)1.3 选择排序(简单)2 比较3 补充3.1 快速排序3.2 什么是桶排序3.3 ...
- CISCO、H3C、华为三层交换机端口二三层切换命令对比
很多人都在问H3C是否有像CISCO三层端口切换类似的命令 switchport . 答案是肯定的.有.很多人都不知道. 其实无论是思科还是H3C还是华为他们都有这样的命令.但是在H3C和华为中不经常 ...
- LeetCode: Valid Palindrome 解题报告
Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric char ...