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 ...
随机推荐
- 快速排序 java详解
1.快速排序简介: 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此 ...
- One Person Game(zoj3593+扩展欧几里德)
One Person Game Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit Status ...
- ECMAScript正则表达式6个最新特性
译者按: 还没学好ES6?ECMAScript 2018已经到来啦! 原文:ECMAScript regular expressions are getting better! 作者: Mathias ...
- HDU3567
Eight II Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 130000/65536 K (Java/Others)Total S ...
- css的一些细节
1.中文符号居中效果 对于动态输出文字可以不用在意,某些页面可能会有类似提示文案的地方,用英文标点符号,对于居中效果比较友好. 2.元素的上下间距 布局的时候从上往下开始写页面,一般都是写下一个的元素 ...
- Salesforce小知识:累计汇总字段类型
累计汇总字段类型的定义 Salesforce中可以在两个对象之间建立关系.一个对象的某一条记录可以有若干条相关联的其他对象记录. 累计汇总字段可以将这些相关联的记录中的某些字段值汇总起来,显示给用户. ...
- Storm的DRPC
RPC:Remote Procedure Call DRPC:Distributed RPC Hadoop提供了RPC的实现机制,实现方法见:<>,本文主要介绍Storm的DRPC. ...
- SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法
最近项目转型使用SpringCloud框架下的微服务架构,各微服务之间使用Feign进行调用.期间,发现若被调用方法涉及到文件上传且仅存在单个文件时,一切正常,代码片段如下: @RequestMapp ...
- Centos7下搭建SVN服务,本地提交代码自动同步到WEB目录
1.安装SVN服务[root@bogon ~]# yum -y install subversion 2.查看svnserve安装目录[root@bogon ~]# whereis svnserves ...
- macos 下安装brew
1.终端执行 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master ...