1 数据库环境搭建

创建数据库boscrm

执行脚本:

脚本内容:

/*
Navicat MySQL Data Transfer Source Server : root
Source Server Version : 50022
Source Host : localhost:3306
Source Database : crm Target Server Type : MYSQL
Target Server Version : 50022
File Encoding : 65001 Date: 2015-04-19 17:46:45
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for `t_customer`
-- ----------------------------
DROP TABLE IF EXISTS `t_customer`;
CREATE TABLE `t_customer` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`station` varchar(255) default NULL,
`telephone` varchar(255) default NULL,
`address` varchar(255) default NULL,
`decidedzone_id` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of t_customer
-- ----------------------------
INSERT INTO `t_customer` VALUES ('', '张三', '百度', '', '北京市西城区长安街100号', null);
INSERT INTO `t_customer` VALUES ('', '李四', '哇哈哈', '', '上海市虹桥区南京路250号', null);
INSERT INTO `t_customer` VALUES ('', '王五', '搜狗', '', '天津市河北区中山路30号', null);
INSERT INTO `t_customer` VALUES ('', '赵六', '联想', '', '石家庄市桥西区和平路10号', null);
INSERT INTO `t_customer` VALUES ('', '小白', '测试空间', '', '内蒙古自治区呼和浩特市和平路100号', null);
INSERT INTO `t_customer` VALUES ('', '小黑', '联想', '', '天津市南开区红旗路20号', null);
INSERT INTO `t_customer` VALUES ('', '小花', '百度', '', '北京市东城区王府井大街20号', null);
INSERT INTO `t_customer` VALUES ('', '小李', '长城', '', '北京市昌平区建材城西路100号', null);

2 web 项目环境搭建

第一步: 创建动态 web 项目

第二步: 导入 CXF 相关 jar

第三步: 配置 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>bos-crm</display-name> <!-- 配置文件位置的配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:cxf.xml</param-value>
</context-param> <!-- 配置spring容器随web项目的启动而启动 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 配置 CXF 框架提供的 Servlet -->
<!-- 配置了spring容器监听之后,这里就不需要在配置初始化参数告诉配置文件位置 -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping> <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

第四步: 创建Customer实体类

针对 t_customer 表创建一个 Customer 客户实体类

package com.test.entity;

public class Customer {

    private Integer id;
private String name;
private String station;
private String telephone;
private String address;
private String decidedzone_id; public Customer() { } public Customer(Integer id, String name, String station, String telephone, String address, String decidedzone_id) {
this.id = id;
this.name = name;
this.station = station;
this.telephone = telephone;
this.address = address;
this.decidedzone_id = decidedzone_id;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getStation() {
return station;
} public void setStation(String station) {
this.station = station;
} public String getTelephone() {
return telephone;
} public void setTelephone(String telephone) {
this.telephone = telephone;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getDecidedzone_id() {
return decidedzone_id;
} public void setDecidedzone_id(String decidedzone_id) {
this.decidedzone_id = decidedzone_id;
}
}

decidedzone_id:逻辑外键。 两张表在不同的库里面。

t_customer表在boscrm库中,decidedzone在bos库中

第五步: 开发一个接口和实现类

package com.test.service;

import java.util.List;

import javax.jws.WebService;

import com.test.entity.Customer;

@WebService
public interface ICustomerService { public abstract List<Customer> findAll();
}
package com.test.service;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.transaction.annotation.Transactional; import com.test.entity.Customer; @Transactional
public class CustomerServiceImpl implements ICustomerService { private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
@Override
public List<Customer> findAll() {
String sql = "select * from t_customer";
List<Customer> list = jdbcTemplate.query(sql, new RowMapper<Customer>(){ @Override
public Customer mapRow(ResultSet rs, int arg1) throws SQLException {
Integer id = rs.getInt("id"); //根据字段名称从结果集中获取对应的值
String name = rs.getString("name");
String station = rs.getString("station");
String telephone = rs.getString("telephone");
String address = rs.getString("address");
String decidedzone_id = rs.getString("decidedzone_id");
return new Customer(id, name, station, telephone, address, decidedzone_id);
}
});
return list;
} }

Spring 注解和配置文件可以混合使用。

第六步: 在类路径下提供 cxf.xml

<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<!-- 引入CXF Bean定义如下,早期的版本中使用 -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///boscrm"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean> <!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- 支持事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean> <bean name="customerService" class="com.test.service.CustomerServiceImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean> <!-- 注册服务 -->
<jaxws:server id="myService" address="/customer">
<jaxws:serviceBean>
<ref bean="customerService"/>
</jaxws:serviceBean>
</jaxws:server>
</beans>

3 项目测试

发布项目到tomcat,因为配置spring监听器,所以有问题,启动的时候就会报错。

启动项目之后,在浏览器输入下面的地址即可访问:http://localhost:8080/bos-crm/service

结果如下:点击就可以查看到wsdl文档

wsdl文档完整版如下:

Developing crm service based on apache cxf的更多相关文章

  1. Apache CXF实现Web Service(5)—— GZIP使用

    Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...

  2. Apache CXF多个远程拒绝服务漏洞(CVE-2013-2160)

    漏洞版本: Apache Group CXF <= 2.5.10 Apache Group CXF 2.7.4 Apache Group CXF 2.6.7 漏洞描述: BUGTRAQ ID: ...

  3. JAVAEE——BOS物流项目07:WebService入门、apache CXF入门、基于CXF发布CRM服务

    1 学习计划 1.WebService入门 n 什么是WebService n 调用网络上的WebService服务 n SOAP和WSDL概念 n 基于JDK1.7发布一个简单的WebService ...

  4. Spring 4 集成Apache CXF开发JAX-RS Web Service

    什么是JAX-RS 在JSR-311规范中定义,即Java API for RESTful Web Services,一套Java API,用于开发 RESTful风格的Webservice. 工程概 ...

  5. Apache CXF实现Web Service(4)——Tomcat容器和Spring实现JAX-RS(RESTful) web service

    准备 我们仍然使用 Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 中的代码作为基础,并 ...

  6. Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service

    起步 参照这一系列的另外一篇文章: Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 首先 ...

  7. Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service

    实现目标 http://localhost:9000/rs/roomservice 为入口, http://localhost:9000/rs/roomservice/room为房间列表, http: ...

  8. Apache CXF实现Web Service(1)——不借助重量级Web容器和Spring实现一个纯的JAX-WS web service

    废话少说,先在Eclipse中新建一个Java Project (可以不是WTP的Dynamic Web Project) 选择Java Project 再看pom.xml 我们使用cxf 3.1.4 ...

  9. 使用Apache CXF和Spring集成创建Web Service(zz)

    使用Apache CXF和Spring集成创建Web Service 您的评价:       还行  收藏该经验       1.创建HelloWorld 接口类 查看源码 打印? 1 package ...

随机推荐

  1. Android sutdio单元测试 简单使用步骤

    1.简介 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.比如一个函数,一个方法等 2.添加依赖 dependencies { testCompile 'junit: ...

  2. Azure SQL作業

    由於要定期去刪除比較久的資料,礙於Azure SQL DB目前無法直接創建作業,目前找到一種方式就是通過local的SQL SERVER來執行AZURE SQL指令. 步驟如下: SQL Server ...

  3. Js 获取屏幕坐标

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. 使用web3部署一个比较复杂的智能合约

    以太坊系列之二十一 使用web3部署比较复杂的智能合约 搭建私链上的雷电网络 以太坊系列之二十一 使用web3部署比较复杂的智能合约 1 雷电网络智能合约简单介绍 2 remix 无法部署使用了lib ...

  5. 以太坊系列之五: p2p的nat模块--以太坊源码学习

    p2p的nat模块 该模块相对比较简单,因为nat的真正实现并不在此模块,主要是使用了第三方的nat-upnp和nat-pmp来实现真正的穿透(端口映射). 对外公布的接口 ```go // An i ...

  6. [Win32::Console]Perl终端版生命游戏

    环境,WinXP/Win7  Perl 5.16 默认循环1000次,按ESC提前退出 use strict; use Term::ReadKey; use Win32::Console; use T ...

  7. 6w5:第六周程序填空题2

    描述 下面程序的输出结果是: destructor B destructor A 请完整写出 class A. 限制条件:不得为 class A 编写构造函数. #include <iostre ...

  8. 解决Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker fro问题

    项目中碰到一个问题,就是将一个map转换成json格式的时候出现错误,最后排查将延迟加载关闭后成功转换,因为数据量较大,于是重新创建了一个对象进行接收. 解决办法是在配置文件中进行配置 虽然解决了这个 ...

  9. javascript常用函数(find、filter、map)

    1.find 查询数组中符合条件的第一个元素,如果没有符合条件的元素则返回空数组var arr = [1,2,3,4,5,6,7];var dogs=arr.find(v=>v===4);结果: ...

  10. 【大数据系统架构师】0.1 Java编程基础

    1. 初识Java 2. Java语法 快速入门点我 2.1 数据类型和运算符 2.2 流程控制语句 2.3 数组 2.4 类和对象 2.5 OOP三大特性 2.6 集合框架与泛型 2.7 反射机制 ...