WebService 的CXF框架 WS独立服务之HelloWorld
WebService:不同系统不同语言的数据交互,
CXF主要分为两种服务方式:
1 )JAX-WS:传输数据, xml格式,基于SOAP协议(规范:规定了xml传递数据的编码规范) ;
2 )JAX-RS:传输数据,xml或json格式.基于HTTP协议.(风格).
一:WS独立服务使用(主要看底层如何实现)
1.建立项目导包

1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2 <modelVersion>4.0.0</modelVersion>
3 <groupId>cn.itcast.maven</groupId>
4 <artifactId>cxf_ws_helloworld</artifactId>
5 <version>0.0.1-SNAPSHOT</version>
6 <name>cxf_ws_helloworld</name>
7 <description>独立发布CXF服务java项目</description>
8
9 <dependencies>
10 <!-- 要进行jaxws 服务开发 -->
11 <dependency>
12 <groupId>org.apache.cxf</groupId>
13 <artifactId>cxf-rt-frontend-jaxws</artifactId>
14 <version>3.0.1</version>
15 </dependency>
16
17 <!-- 内置jetty web服务器 -->
18 <dependency>
19 <groupId>org.apache.cxf</groupId>
20 <artifactId>cxf-rt-transports-http-jetty</artifactId>
21 <version>3.0.1</version>
22 </dependency>
23
24 <!-- 日志实现 -->
25 <dependency>
26 <groupId>org.slf4j</groupId>
27 <artifactId>slf4j-log4j12</artifactId>
28 <version>1.7.12</version>
29 </dependency>
30 </dependencies>
31 </project>

2.与pom中的日志实现相对应.

1 ### direct log messages to stdout ###
2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
3 log4j.appender.stdout.Target=System.out
4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
6
7 ### direct messages to file mylog.log ###
8 log4j.appender.file=org.apache.log4j.FileAppender
9 log4j.appender.file.File=c:/mylog.log
10 log4j.appender.file.layout=org.apache.log4j.PatternLayout
11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
12
13 ### set log levels - for more verbose logging change 'info' to 'debug' ###
14
15 log4j.rootLogger=info, stdout

3.编写服务端程序
1)编写实体类Car 与 User

1 package cn.itcast.cxf.domain;
2
3 public class Car {
4 private Integer id;
5 private String carName;
6 private Double price;
7
8 public Integer getId() {
9 return id;
10 }
11
12 public void setId(Integer id) {
13 this.id = id;
14 }
15
16 public String getCarName() {
17 return carName;
18 }
19
20 public void setCarName(String carName) {
21 this.carName = carName;
22 }
23
24 public Double getPrice() {
25 return price;
26 }
27
28 public void setPrice(Double price) {
29 this.price = price;
30 }
31
32 @Override
33 public String toString() {
34 return "Car [id=" + id + ", carName=" + carName + ", price=" + price + "]";
35 }
36
37 }


1 package cn.itcast.cxf.domain;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 public class User {
7 private Integer id;
8 private String username;
9 private String city;
10
11 private List<Car> cars = new ArrayList<Car>();
12
13 public Integer getId() {
14 return id;
15 }
16
17 public void setId(Integer id) {
18 this.id = id;
19 }
20
21 public String getUsername() {
22 return username;
23 }
24
25 public void setUsername(String username) {
26 this.username = username;
27 }
28
29 public String getCity() {
30 return city;
31 }
32
33 public void setCity(String city) {
34 this.city = city;
35 }
36
37 public List<Car> getCars() {
38 return cars;
39 }
40
41 public void setCars(List<Car> cars) {
42 this.cars = cars;
43 }
44
45 }

2)编写服务(Service)

1 package cn.itcast.cxf.service;
2
3 import java.util.List;
4
5 import javax.jws.WebMethod;
6 import javax.jws.WebService;
7
8 import cn.itcast.cxf.domain.Car;
9 import cn.itcast.cxf.domain.User;
10 //使用类上面,说明标记类时WebService的服务类
11 @WebService
12 public interface IUserService {
13 //服务方法
14 @WebMethod
15 public String sayHello(String name);
16
17 @WebMethod
18 public List<Car> findCarsByUser(User user);
19 }


1 package cn.itcast.cxf.service;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jws.WebService;
7
8 import cn.itcast.cxf.domain.Car;
9 import cn.itcast.cxf.domain.User;
10 //endpointInterface接口服务完整类名,serviceName 服务名称
11 @WebService(endpointInterface = "cn.itcast.cxf.service.IUserService", serviceName = "userService")
12 public class UserServiceImpl implements IUserService {
13
14 // 简单参数传递
15 public String sayHello(String name) {
16 return "Hello," + name;
17 }
18
19 // 复杂参数传递
20 public List<Car> findCarsByUser(User user) {
21 if ("xiaoming".equals(user.getUsername())) {
22 List<Car> cars = new ArrayList<Car>();
23 Car car1 = new Car();
24 car1.setId(1);
25 car1.setCarName("大众途观");
26 car1.setPrice(200000d);
27 cars.add(car1);
28
29 Car car2 = new Car();
30 car2.setId(2);
31 car2.setCarName("现代ix35");
32 car2.setPrice(170000d);
33 cars.add(car2);
34
35 return cars;
36 } else {
37 return null;
38 }
39 }
40 }

3)将Uservice的服务方法,发布到网上,让其他系统调用

1 package cn.itcast.cxf.ws.server;
2
3 import javax.xml.ws.Endpoint;
4
5 import cn.itcast.cxf.service.IUserService;
6 import cn.itcast.cxf.service.UserServiceImpl;
7
8 public class WS_Server {
9
10 public static void main(String[] args) {
11 // 使用CXF 将 UserService服务 注册到网络上
12 // 1 、 服务实现对象
13 IUserService userService = new UserServiceImpl();
14 // 2、 发布服务地址
15 String address = "http://localhost:9999/userService";
16 // 3、 发布服务
17 Endpoint.publish(address, userService);
18
19 System.out.println("服务已经启动...");
20 }
21 }

通过:http://ip地址:端口号/服务名称?wsdl
例如:网址: http://localhost:9999/userService?wsdl
4.编写客户端代码

1 package cn.itcast.cxf.ws.client;
2 2
3 3 import org.apache.cxf.interceptor.LoggingInInterceptor;
4 4 import org.apache.cxf.interceptor.LoggingOutInterceptor;
5 5 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
6 6
7 7 import cn.itcast.cxf.domain.User;
8 8 import cn.itcast.cxf.service.IUserService;
9 9
10 10 public class WS_Client {
11 11 public static void main(String[] args) {
12 12 JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
13 13 jaxWsProxyFactoryBean.setServiceClass(IUserService.class);
14 14 jaxWsProxyFactoryBean.setAddress("http://localhost:9999/userService");
15 15
16 16 // 通过拦截器 打印soap 报文信息
17 17 jaxWsProxyFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
18 18 jaxWsProxyFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
19 19
20 20 IUserService proxy = (IUserService) jaxWsProxyFactoryBean.create();
21 21
22 22 // 调用sayHello
23 23 System.out.println(proxy.sayHello("程序猿"));
24 24
25 25 // 调用findCarsByUser
26 26 User user = new User();
27 27 user.setUsername("xiaoming");
28 28 System.out.println(proxy.findCarsByUser(user));
29 29
30 30 }
31 31 }

WebService 的CXF框架 WS独立服务之HelloWorld的更多相关文章
- 转载 WebService 的CXF框架 WS方式Spring开发
WebService 的CXF框架 WS方式Spring开发 1.建项目,导包. 1 <project xmlns="http://maven.apache.org/POM/4.0 ...
- WebService 的CXF框架 WS方式Spring开发
1.建项目,导包. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...
- WebService之CXF框架
本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具 1.为什么要用到ant这个工具呢? Ant做为一种 ...
- webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】
实现接口的webservice 服务端 import javax.jws.WebService; /**面向接口的webservice发布方式 * * */ @WebService public in ...
- Webservice与CXF框架快速入门
1. Webservice Webservice是一套远程调用技术规范 远程调用RPC, 实现了系统与系统进程间的远程通信.java领域有很多可实现远程通讯的技术,如:RMI(Socket + 序列化 ...
- Eclipse+CXF框架开发Web服务实战
一. 说明 采用CXF框架开发webservice. 所用软件及版本如下. 操作系统:Window XP SP3. JDK:JDK1.6.0_07,http://www.oracle.com/ ...
- WEBSERVICE之CXF框架开发webservice
之前学习了使用jdk开发webservice服务,现在开始学习使用框架(cxf)开发webservice. 1.准备工作 A.使用cxf开发webservice服务,需要用到apache-cxf-3. ...
- WebService中用CXF框架的wsdl部署生成客户端代码时,使用cmd命令口出现wsimport不是内部或外部命令的问题
网上有很多,都不好用,这个立竿见影的 set JAVA_HOME = *:\Program Files\Java\jdk1.8.0_181(此处为自己jdk的安装路径) set CLASSPATH = ...
- 使用CXF框架,发布webservice服务,并使用客户端远程访问webservice
使用CXF框架,发布webservice服务,并使用客户端远程访问webservice 1. CXF介绍 :soa的框架 * cxf 是 Celtrix (ESB框架)和 XFire(webs ...
随机推荐
- 使用 Immutable Subject 来驱动 Angular 应用
现状 最近在重构手上的一个 Angular 项目,之前是用的自己写的一个仿 Elm 架构的库来进行的状态管理,期间遇到了这些痛点: 样板代码太多 异步处理太过繁琐 需要单独维护一个 npm 包 其中, ...
- 【RabbitMQ】5、RabbitMQ任务分发机制
当有Consumer需要大量的运算时,RabbitMQ Server需要一定的分发机制来balance每个Consumer的load.接下来我们分布讲解. 应用场景就是RabbitMQ Server会 ...
- minitab 转换语言
在使用minitab的时候,我们会以中文版熟悉界面,但是我们在实际操作的时候就要使用英文版的功能. 那么如何改变其语言环境呢. 很简单: 工具->选项->语言
- 汇编语言--CPU资源和存储器(二)
二.CPU资源和存储器 需要访问的硬件资源主要有:CPU内部资源.存储器和I/O端口. 1.寄存器组 (1)16位寄存器组 16位CPU所含有的寄存器有(见图2.1中16位寄存器部分): 4个数据寄存 ...
- 使用svn钩子遇到的坑
1.svn钩子(hooks)自动部署代码到web目录(以前公司用,很好奇怎么做的,折腾了两天,掉进了坑里)共勉!!! web目录:/home/www/xiaokai svn版本库目录:/svn/xia ...
- 初学HTML-9
详情和概要标签:利用summary标签来描述概要信息,利用details标签来描述详情信息. 默认情况下是折叠显示. 格式:<details> <summary>概要信息< ...
- php使用PHPexcel类读取excel文件(循环读取每个单元格的数据)
error_reporting(E_ALL); date_default_timezone_set('Asia/ShangHai'); include_once('Classes/PHPExcel/I ...
- IE9获取file控件的本地文件路径
最近发现,在IE9下,公司网站的本地图片预览都无法正常显示,经过测试发现,原因在于IE9下无法获取file控件的文件路径. 以前的代码如下: var strPic = fileImg.value; i ...
- CloudSim源代码学习——任务单元(Cloudlet)
/* * Title: CloudSim Toolkit * Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Sim ...
- Python:GUI之tkinter学习笔记3事件绑定
相关内容: command bind protocol 首发时间:2018-03-04 19:26 command: command是控件中的一个参数,如果使得command=函数,那么点击控件的时候 ...