1 数据库环境搭建
创建数据库boscrm
执行脚本:
脚本内容:
/*Navicat MySQL Data TransferSource Server ????????: rootSource Server Version : 50022Source Host ??????????: localhost:3306Source Database ??????: crmTarget Server Type ???: MYSQLTarget Server Version : 50022File Encoding ????????: 65001Date: 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 (‘1‘, ‘张三‘, ‘百度‘, ‘13811111111‘, ‘北京市西城区长安街100号‘, null);INSERT INTO `t_customer` VALUES (‘2‘, ‘李四‘, ‘哇哈哈‘, ‘13822222222‘, ‘上海市虹桥区南京路250号‘, null);INSERT INTO `t_customer` VALUES (‘3‘, ‘王五‘, ‘搜狗‘, ‘13533333333‘, ‘天津市河北区中山路30号‘, null);INSERT INTO `t_customer` VALUES (‘4‘, ‘赵六‘, ‘联想‘, ‘18633333333‘, ‘石家庄市桥西区和平路10号‘, null);INSERT INTO `t_customer` VALUES (‘5‘, ‘小白‘, ‘测试空间‘, ‘18511111111‘, ‘内蒙古自治区呼和浩特市和平路100号‘, null);INSERT INTO `t_customer` VALUES (‘6‘, ‘小黑‘, ‘联想‘, ‘13722222222‘, ‘天津市南开区红旗路20号‘, null);INSERT INTO `t_customer` VALUES (‘7‘, ‘小花‘, ‘百度‘, ‘13733333333‘, ‘北京市东城区王府井大街20号‘, null);INSERT INTO `t_customer` VALUES (‘8‘, ‘小李‘, ‘长城‘, ‘13788888888‘, ‘北京市昌平区建材城西路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;@WebServicepublic 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;@Transactionalpublic 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
原文地址:https://www.cnblogs.com/jepson6669/p/8886580.html