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 ...
随机推荐
- jQuery学习(2)ajax()使用
在上一篇分享JavaScript之使用AJAX(适合初学者)中,我们学习了如何在JavaScript中使用AJAX.由于jQuery出色的性能和简洁的写法,且它也支持AJAX的使用,所以,本次分享 ...
- Gulp Error: Cannot find module 'jshint/src/cli'
I'm following sitepoint's An introduction to Gulp.js, but I'm stuck on step four, when I try to run ...
- C++注入记事本
#include <iostream>; using namespace std; #include <windows.h>; #include <tlhelp32.h& ...
- Java中的集合迭代器
集合的迭代器 任何集合都有迭代器. 任何集合类,都必须能以某种方式存取元素,否则这个集合容器就没有任何意义. 迭代器,也是一种模式(也叫迭代器模式).在java中它是一个对象,其目的是遍历并选中其中的 ...
- JAVA中的集合容器操作类
目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...
- C-指针,二级指针,二维数组作为函数参数使用,C语言链表(详解)
一级指针 int *p; //表示定义一个int型(4字节)的指针p &p //表示p自身的地址位置 p ...
- ES 5 中 判断数组的方法
源代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 微信小程序日历课表
最近项目中使用到了日历,在网上找了一些参考,自己改改,先看效果图 wxml <view class="date"> <image class="dire ...
- Android View 绘制流程
Android 中 Activity 是作为应用程序的载体存在,代表着一个完整的用户界面,提供了一个窗口来绘制各种视图,当 Activity 启动时,我们会通过 setContentView 方法来设 ...
- Angular 2基础(一) 环境搭建
Angular2是一款开源JavaScript库,由Google维护,用来创建页面应用程序.正式发布于2016年9月,基于ES6开发. 一.准备工作 使用Angular2开发,需要预先做一些配置上的配 ...