CXF——WebService简介,CXF框架的使用

Stella981
• 阅读 501

WebService

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

CXF——WebService简介,CXF框架的使用

WebService的特点

  • WebService通过HTTP POST方式接受客户的请求
  • WebService与客户端之间一般使用SOAP协议传输XML数据
  • 它本身就是为了跨平台或跨语言而设计的

使用apache CXF发布一个WebService

1、创建数据库并建表

CXF——WebService简介,CXF框架的使用 CXF——WebService简介,CXF框架的使用

 1 /*
 2 Navicat MySQL Data Transfer
 3 
 4 Source Server         : root
 5 Source Server Version : 50022
 6 Source Host           : localhost:3306
 7 Source Database       : crm
 8 
 9 Target Server Type    : MYSQL
10 Target Server Version : 50022
11 File Encoding         : 65001
12 
13 Date: 2015-04-19 17:46:45
14 */
15 
16 SET FOREIGN_KEY_CHECKS=0;
17 
18 -- ----------------------------
19 -- Table structure for `t_customer`
20 -- ----------------------------
21 DROP TABLE IF EXISTS `t_customer`;
22 CREATE TABLE `t_customer` (
23   `id` int(11) NOT NULL auto_increment,
24   `name` varchar(255) default NULL,
25   `station` varchar(255) default NULL,
26   `telephone` varchar(255) default NULL,
27   `address` varchar(255) default NULL,
28   `decidedzone_id` varchar(255) default NULL,
29   PRIMARY KEY  (`id`)
30 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
31 
32 -- ----------------------------
33 -- Records of t_customer
34 -- ----------------------------
35 INSERT INTO `t_customer` VALUES ('1', '张三', '百度', '13811111111', '北京市西城区长安街100号', null);
36 INSERT INTO `t_customer` VALUES ('2', '李四', '哇哈哈', '13822222222', '上海市虹桥区南京路250号', null);
37 INSERT INTO `t_customer` VALUES ('3', '王五', '搜狗', '13533333333', '天津市河北区中山路30号', null);
38 INSERT INTO `t_customer` VALUES ('4', '赵六', '联想', '18633333333', '石家庄市桥西区和平路10号', null);
39 INSERT INTO `t_customer` VALUES ('5', '小白', '测试空间', '18511111111', '内蒙古自治区呼和浩特市和平路100号', null);
40 INSERT INTO `t_customer` VALUES ('6', '小黑', '联想', '13722222222', '天津市南开区红旗路20号', null);
41 INSERT INTO `t_customer` VALUES ('7', '小花', '百度', '13733333333', '北京市东城区王府井大街20号', null);
42 INSERT INTO `t_customer` VALUES ('8', '小李', '长城', '13788888888', '北京市昌平区建材城西路100号', null);

建表语句

2、配置maven的配置文件

CXF——WebService简介,CXF框架的使用 CXF——WebService简介,CXF框架的使用

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <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/maven-v4_0_0.xsd">
  3 
  4   <modelVersion>4.0.0</modelVersion>
  5   <packaging>war</packaging>
  6 
  7   <name>crm</name>
  8   <groupId>cn.x5456</groupId>
  9   <artifactId>crm</artifactId>
 10   <version>1.0-SNAPSHOT</version>
 11 
 12   <!-- 通过属性定义指定jar的版本 -->
 13   <properties>
 14     <spring.version>4.3.14.RELEASE</spring.version>
 15     <hibernate.version>5.0.7.Final</hibernate.version>
 16     <struts2.version>2.3.24</struts2.version>
 17     <slf4j.version>1.6.6</slf4j.version>
 18     <log4j.version>1.2.12</log4j.version>
 19     <shiro.version>1.2.3</shiro.version>
 20   </properties>
 21 
 22   <dependencies>
 23     <dependency>
 24       <groupId>org.springframework</groupId>
 25       <artifactId>spring-context</artifactId>
 26       <version>${spring.version}</version>
 27     </dependency>
 28 
 29     <dependency>
 30       <groupId>org.springframework</groupId>
 31       <artifactId>spring-context-support</artifactId>
 32       <version>${spring.version}</version>
 33     </dependency>
 34 
 35     <dependency>
 36       <groupId>org.springframework</groupId>
 37       <artifactId>spring-web</artifactId>
 38       <version>${spring.version}</version>
 39     </dependency>
 40 
 41     <dependency>
 42       <groupId>org.springframework</groupId>
 43       <artifactId>spring-orm</artifactId>
 44       <version>${spring.version}</version>
 45     </dependency>
 46 
 47     <dependency>
 48       <groupId>org.springframework</groupId>
 49       <artifactId>spring-beans</artifactId>
 50       <version>${spring.version}</version>
 51     </dependency>
 52 
 53     <dependency>
 54       <groupId>org.springframework</groupId>
 55       <artifactId>spring-core</artifactId>
 56       <version>${spring.version}</version>
 57     </dependency>
 58 
 59     <dependency>
 60       <groupId>org.aspectj</groupId>
 61       <artifactId>aspectjweaver</artifactId>
 62       <version>1.7.4</version>
 63     </dependency>
 64 
 65     <!-- struts2 begin -->
 66     <dependency>
 67       <groupId>org.apache.struts</groupId>
 68       <artifactId>struts2-core</artifactId>
 69       <version>${struts2.version}</version>
 70       <!-- 排除传递的依赖 -->
 71       <exclusions>
 72         <exclusion>
 73           <artifactId>javassist</artifactId>
 74           <groupId>javassist</groupId>
 75         </exclusion>
 76       </exclusions>
 77     </dependency>
 78     <dependency>
 79       <groupId>org.apache.struts</groupId>
 80       <artifactId>struts2-spring-plugin</artifactId>
 81       <version>${struts2.version}</version>
 82     </dependency>
 83     <dependency>
 84       <groupId>org.apache.struts</groupId>
 85       <artifactId>struts2-convention-plugin</artifactId>
 86       <version>${struts2.version}</version>
 87     </dependency>
 88     <!-- struts2 end -->
 89 
 90     <!-- hibernate begin -->
 91     <dependency>
 92       <groupId>org.hibernate</groupId>
 93       <artifactId>hibernate-core</artifactId>
 94       <version>${hibernate.version}</version>
 95     </dependency>
 96     <!-- hibernate end -->
 97 
 98     <!-- log start -->
 99     <dependency>
100       <groupId>log4j</groupId>
101       <artifactId>log4j</artifactId>
102       <version>${log4j.version}</version>
103     </dependency>
104 
105     <dependency>
106       <groupId>org.slf4j</groupId>
107       <artifactId>slf4j-api</artifactId>
108       <version>${slf4j.version}</version>
109     </dependency>
110 
111     <dependency>
112       <groupId>org.slf4j</groupId>
113       <artifactId>slf4j-log4j12</artifactId>
114       <version>${slf4j.version}</version>
115     </dependency>
116     <!-- log end -->
117 
118     <dependency>
119       <groupId>org.apache.poi</groupId>
120       <artifactId>poi</artifactId>
121       <version>3.11</version>
122     </dependency>
123 
124     <dependency>
125       <groupId>org.apache.cxf</groupId>
126       <artifactId>cxf-rt-frontend-jaxws</artifactId>
127       <version>3.1.5</version>
128     </dependency>
129     <dependency>
130       <groupId>org.apache.cxf</groupId>
131       <artifactId>cxf-rt-transports-http</artifactId>
132       <version>3.1.5</version>
133     </dependency>
134     <dependency>
135       <groupId>org.apache.cxf</groupId>
136       <artifactId>cxf-rt-frontend-jaxrs</artifactId>
137       <version>3.1.5</version>
138     </dependency>
139     <dependency>
140       <groupId>junit</groupId>
141       <artifactId>junit</artifactId>
142       <version>4.10</version>
143       <scope>test</scope>
144     </dependency>
145 
146     <!-- 加入servlet和jsp的依赖 -->
147     <dependency>
148       <groupId>javax.servlet</groupId>
149       <artifactId>servlet-api</artifactId>
150       <version>2.5</version>
151       <scope>provided</scope>
152     </dependency>
153     <dependency>
154       <groupId>javax.servlet</groupId>
155       <artifactId>jsp-api</artifactId>
156       <version>2.0</version>
157       <scope>provided</scope>
158     </dependency>
159 
160     <!-- 引入pinyin4J的依赖 -->
161     <dependency>
162       <groupId>com.belerweb</groupId>
163       <artifactId>pinyin4j</artifactId>
164       <version>2.5.0</version>
165     </dependency>
166 
167     <!-- 引入json-lib的依赖 -->
168     <dependency>
169       <groupId>net.sf.json-lib</groupId>
170       <artifactId>json-lib</artifactId>
171       <version>2.4</version>
172     </dependency>
173 
174     <!-- 引入c3p0jar包 -->
175     <dependency>
176       <groupId>c3p0</groupId>
177       <artifactId>c3p0</artifactId>
178       <version>0.9.1.2</version>
179     </dependency>
180 
181     <!-- 引入ehcache的依赖 -->
182     <dependency>
183       <groupId>net.sf.ehcache</groupId>
184       <artifactId>ehcache-core</artifactId>
185       <version>2.6.6</version>
186     </dependency>
187     <!-- 引入shiro框架的依赖 -->
188     <dependency>
189       <groupId>org.apache.shiro</groupId>
190       <artifactId>shiro-all</artifactId>
191       <version>1.2.2</version>
192     </dependency>
193     <!-- 引入MySQL数据库驱动依赖 -->
194     <dependency>
195       <groupId>mysql</groupId>
196       <artifactId>mysql-connector-java</artifactId>
197       <version>5.1.32</version>
198     </dependency>
199     <dependency>
200       <groupId>commons-fileupload</groupId>
201       <artifactId>commons-fileupload</artifactId>
202       <version>1.3.1</version>
203     </dependency>
204     <dependency>
205       <groupId>commons-io</groupId>
206       <artifactId>commons-io</artifactId>
207       <version>2.0.1</version>
208     </dependency>
209 
210     <!--坑爹的Java9-->
211 
212     <!--<dependency>-->
213       <!--<groupId>javax.xml.bind</groupId>-->
214       <!--<artifactId>jaxb-api</artifactId>-->
215       <!--<version>2.2.12</version>-->
216     <!--</dependency>-->
217 
218     <!--<dependency>-->
219       <!--<groupId>javax.activation</groupId>-->
220       <!--<artifactId>activation</artifactId>-->
221       <!--<version>1.1.1</version>-->
222     <!--</dependency>-->
223 
224   </dependencies>
225 
226   <build>
227     <!-- 插件 -->
228     <plugins>
229       <plugin>
230         <groupId>org.apache.maven.plugins</groupId>
231         <artifactId>maven-resources-plugin</artifactId>
232         <version>2.5</version>
233       </plugin>
234       <plugin>
235         <groupId>org.apache.maven.plugins</groupId>
236         <artifactId>maven-compiler-plugin</artifactId>
237         <version>2.3.2</version>
238         <configuration>
239           <source>1.7</source>
240           <target>1.7</target>
241         </configuration>
242       </plugin>
243       <!-- 引入tomcat插件 -->
244       <plugin>
245         <groupId>org.apache.tomcat.maven</groupId>
246         <artifactId>tomcat7-maven-plugin</artifactId>
247         <version>2.2</version>
248         <configuration>
249           <path>/crm</path>
250           <port>8889</port>
251         </configuration>
252       </plugin>
253     </plugins>
254     <resources>
255       <resource>
256         <directory>src/main/java</directory>
257         <includes>
258           <include>**/*.properties</include>
259           <include>**/*.xml</include>
260         </includes>
261         <filtering>false</filtering>
262       </resource>
263       <resource>
264         <directory>src/main/resources</directory>
265         <includes>
266           <include>**/*.properties</include>
267           <include>**/*.xml</include>
268         </includes>
269         <filtering>false</filtering>
270       </resource>
271     </resources>
272   </build>
273 
274 </project>

View Code

3、配置web.xml文件(2.*与3.*有区别)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:cxf.xml</param-value>
    </context-param>
    
    
    <!--配置Spring的监听器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--配置CXF框架提供的Servlet -->
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/service/*</url-pattern>
    </servlet-mapping>
    
</web-app>

4、在类路径下创建cxf.xml文件(2.*与3.*有区别)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://cxf.apache.org/bindings/soap
                    http://cxf.apache.org/schemas/configuration/soap.xsd
                    http://cxf.apache.org/jaxws
                    http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--1.创建连接池对象,使用SpringJDBC自带的-->
    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///CRM"/>
        <property name="username" value="root"/>
        <property name="Password" value="5456"/>
    </bean>
    <!--2.将CustomerServiceImpl放入Spring容器中,由于继承了JdbcDaoSupport类,所以要注入连接池对象-->
    <bean name="customerService" class="cn.x5456.service.CustomerServiceImpl">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 3.配置事务核心管理器,封装了所有事务操作. 依赖于连接池 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 4.开启使用注解管理aop事务 -->
    <context:component-scan base-package="cn.x5456" />
    <tx:annotation-driven/>
    <!-- 5.注册服务 -->
        <!--cxf2.*版本-->
    <!--<jaxws:server id="myService" address="/customer">-->
        <!--<jaxws:serviceBean>-->
            <!--<ref bean="customerService"/>-->
        <!--</jaxws:serviceBean>-->
    <!--</jaxws:server>-->
        <!--cxf3.*版本-->
    <jaxws:endpoint id="myService" implementor="#customerService" address="/customer" />
</beans>

5、根据表创建一个实体类

public class Customer {

    private Integer id;
    private String name;
    private String station;
    private String telephone;
    private String address;
    private String decidedzone_id;
}

6、开发一个接口,和实现类

接口

// @WebService这个注解一定要写在接口上
@WebService
public interface ICustomerService {
    List<Customer> findAll();
}

实现类

@Transactional
public class CustomerServiceImpl extends JdbcDaoSupport implements ICustomerService {
    @Override
    public List<Customer> findAll() {

        String sql = "select * from t_customer";

        List<Customer> customerList = super.getJdbcTemplate().query(sql, new RowMapper<Customer>() {
            @Override
            public Customer mapRow(ResultSet resultSet, int i) throws SQLException {
                Customer customer = new Customer();

                customer.setId(resultSet.getInt("id"));
                customer.setName(resultSet.getString("name"));
                customer.setStation(resultSet.getString("station"));
                customer.setTelephone(resultSet.getString("telephone"));
                customer.setAddress(resultSet.getString("address"));
                return customer;
            }
        });

        return customerList;
    }
}

7、执行命令,创建服务器端的代码

CXF——WebService简介,CXF框架的使用

CXF——WebService简介,CXF框架的使用

将生成的代码copy到测试项目的src目录下

8、书写测试类

public class test {

    @Test
    public void func(){
        CustomerServiceImplService ss = new CustomerServiceImplService();

        ICustomerService proxy = ss.getCustomerServiceImplPort();

        List<Customer> customerList = proxy.findAll();

        System.out.println(customerList);
    }
    
}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
2年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这