CXF3.10与spring4.3整合

CXF3.10与Spring4.3整合实践
本文介绍了如何将CXF3.10与Spring4.3进行整合,包括web工程的创建、相关jar包的导入、web.xml的配置,以及CXFServlet的设置。同时,展示了数据源的配置、程序bean的编写,如 ComboPooledUtil 和 FkXmlAdapter 类。最后,通过启动Tomcat并在浏览器中验证服务,并提供了生成客户端代码的方法。

一。准备工作

1. 新建web工程 WS_Spring

2.导入jar包


3.配置web.xml文件

 <?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0"
  metadata-complete="true">
   <!--  -->
  <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!-- 加载spring容器-->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 将下边的请求交给CXFServlet处理 -->
  <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>/fkservice/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

二。程序编写

1.相关bean

    package com.util;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


import com.mchange.v2.c3p0.ComboPooledDataSource;


public class ComboPooledUtil {
 private static ComboPooledDataSource ds=null;
 static {
try{
ds=new ComboPooledDataSource("oracle");
}catch(Exception e){
e.printStackTrace();
}
 }
 public static Connection getConnection() throws SQLException{
return ds.getConnection();
 }
 public static void release(Connection conn,PreparedStatement ps,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
  }
}

package com.util;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import javax.xml.bind.annotation.adapters.XmlAdapter;


import org.fkjava.cxf.po.Employee;


import com.util.StringEmp.Entry;
//该转换器完成相互转换
public class FkXmlAdapter extends XmlAdapter<StringEmp, Map<String,Employee>>{


@Override
public StringEmp marshal(Map<String, Employee> v) throws Exception {
// TODO Auto-generated method stub
StringEmp emp=new StringEmp();
List<Entry> list=new ArrayList<Entry>();
for(String key:v.keySet()){
Entry entry=new Entry();
entry.setKey(key);
entry.setValue(v.get(key));
list.add(entry);
}
emp.setEntries(list);
return emp;
}


@Override
public Map<String, Employee> unmarshal(StringEmp v) throws Exception {
// TODO Auto-generated method stub
Map<String, Employee> map=new HashMap<String, Employee>();
for(Entry entry:v.getEntries()){
map.put(entry.getKey(),entry.getValue());
}
return map;
}
}

package com.util;


import java.util.List;


import org.fkjava.cxf.po.Employee;


public class StringEmp {
private List<Entry> entries;
    public static class Entry{
 private String key;
 private Employee value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Employee getValue() {
return value;
}
public void setValue(Employee value) {
this.value = value;
}
 
    } 
public List<Entry> getEntries() {
return entries;
}


public void setEntries(List<Entry> entries) {
this.entries = entries;
}
}

package org.fkjava.cxf.po;


public class Department {
 private int deptNo;
 private String deptName;
public int getDeptNo() {
return deptNo;
}
public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}

package org.fkjava.cxf.po;


import java.util.Date;


public class Employee {
private int empNo;
private String empName;
private double sal;
private double comm;
private String empJob;
private int mgr;
private Date hireDate;
private int deptNo;
public int getEmpNo() {
return empNo;
}


public void setEmpNo(int empNo) {
this.empNo = empNo;
}


public String getEmpName() {
return empName;
}


public void setEmpName(String empName) {
this.empName = empName;
}


public double getSal() {
return sal;
}


public void setSal(double sal) {
this.sal = sal;
}


public double getComm() {
return comm;
}


public void setComm(double comm) {
this.comm = comm;
}


public int getMgr() {
return mgr;
}


public void setMgr(int mgr) {
this.mgr = mgr;
}


public Date getHireDate() {
return hireDate;
}


public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}


public String getEmpJob() {
return empJob;
}


public void setEmpJob(String empJob) {
this.empJob = empJob;
}


public int getDeptNo() {
return deptNo;
}


public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}


@Override
public String toString() {
return "Employee [comm=" + comm + ", deptNo=" + deptNo + ", empJob="
+ empJob + ", empName=" + empName + ", empNo=" + empNo
+ ", hireDate=" + hireDate + ", mgr=" + mgr + ", sal=" + sal
+ "]";
}
}

package org.fkjava.cxf.service;


import java.util.List;
import java.util.Map;


import org.fkjava.cxf.po.Department;
import org.fkjava.cxf.po.Employee;




public interface EmployeeService {
List<Employee> getEmpByDept(Department dept);
Map<String, Employee> getAllEmp();
}

package org.fkjava.cxf.service.impl;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.fkjava.cxf.po.Department;
import org.fkjava.cxf.po.Employee;
import org.fkjava.cxf.service.EmployeeService;


import com.util.ComboPooledUtil;


public class EmployeeImpl implements EmployeeService{


@Override
public List<Employee> getEmpByDept(Department dept) {
// TODO Auto-generated method stub
String sql="select EMPNO,DEPTNO,EMPNAME,SAL,COMM,EMPJOB,MGR,HIREDATE from Y_EMP where DEPTNO=?";
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
List<Employee> list=new ArrayList<Employee>();
try {
conn = ComboPooledUtil.getConnection();
   ps=conn.prepareStatement(sql);
   ps.setInt(1, dept.getDeptNo());
   rs=ps.executeQuery();
   while(rs.next()){
    Employee emp=new Employee();
    emp.setEmpNo(rs.getInt(1));
    emp.setDeptNo(rs.getInt(2));
    emp.setEmpName(rs.getString(3));
    emp.setSal(rs.getDouble(4));
    emp.setComm(rs.getDouble(5));
    emp.setEmpJob(rs.getString(6));
    emp.setMgr(rs.getInt(7));
    emp.setHireDate(rs.getDate(8));
    list.add(emp);
   }
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}


@Override
public Map<String, Employee> getAllEmp() {
// TODO Auto-generated method stub
String sql="select EMPNO,DEPTNO,EMPNAME,SAL,COMM,EMPJOB,MGR,HIREDATE from Y_EMP";
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
Map<String,Employee> map=new HashMap<String,Employee>();
try {
conn = ComboPooledUtil.getConnection();
   ps=conn.prepareStatement(sql);
   rs=ps.executeQuery();
   while(rs.next()){
    Employee emp=new Employee();
    emp.setEmpNo(rs.getInt(1));
    emp.setDeptNo(rs.getInt(2));
    emp.setEmpName(rs.getString(3));
    emp.setSal(rs.getDouble(4));
    emp.setComm(rs.getDouble(5));
    emp.setEmpJob(rs.getString(6));
    emp.setMgr(rs.getInt(7));
    emp.setHireDate(rs.getDate(8));
    map.put(rs.getString(3), emp);
   }   
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
}

package org.fkjava.cxf.ws;


import java.util.List;
import java.util.Map;


import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;


import org.fkjava.cxf.po.Department;
import org.fkjava.cxf.po.Employee;


import com.util.FkXmlAdapter;
@WebService
public interface HelloWorld {
String sayHi(String name) ;
List<Employee> getEmpByDept(Department dept);
@XmlJavaTypeAdapter(FkXmlAdapter.class)Map<String,Employee> getAllEmp();
}

package org.fkjava.cxf.ws.impl;




import java.util.Date;
import java.util.List;
import java.util.Map;


import javax.jws.WebService;


import org.fkjava.cxf.po.Department;
import org.fkjava.cxf.po.Employee;
import org.fkjava.cxf.service.EmployeeService;
import org.fkjava.cxf.service.impl.EmployeeImpl;
import org.fkjava.cxf.ws.HelloWorld;


@WebService(endpointInterface="org.fkjava.cxf.ws.HelloWorld",serviceName="HelloWorldWS")
public class HelloWorldImpl implements HelloWorld{
private EmployeeService employeeService;
@Override
public String sayHi(String name) {
// TODO Auto-generated method stub
return name+"你好"+" 现在时间为:"+new Date();
}


@Override
public List<Employee> getEmpByDept(Department dept) {
// TODO Auto-generated method stub

List<Employee> list=employeeService.getEmpByDept(dept);
return list;
}


@Override
public Map<String, Employee> getAllEmp() {
// TODO Auto-generated method stub
Map<String,Employee> map=this.employeeService.getAllEmp();
return map;
}


public EmployeeService getEmployeeService() {
return employeeService;
}


public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}
}

<c3p0-config>
  <default-config>
      <property name="driverClass">com.mysql.jdbc.Driver</property>
      <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcdemo</property>
      <property name="user">root</property>
      <property name="password">root</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">50</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </default-config>


  <!-- if you want to use Oracle database -->
  <named-config name="oracle"> 
    <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
      <property name="jdbcUrl">jdbc:oracle:thin:@10.194.216.61:1521:ctvedi</property>
      <property name="user">PWBWEB</property>
      <property name="password">Foxconn*88</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">50</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>
  </named-config>
</c3p0-config>

<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
">
<!-- jaxws.xsd -->
<import resource="classpath:META-INF/cxf/cxf.xml"></import>
<!-- 注入service  -->
<bean id="empService" class="org.fkjava.cxf.service.impl.EmployeeImpl">
</bean>
<bean id="helloWorldWS" class="org.fkjava.cxf.ws.impl.HelloWorldImpl">
  <property name="employeeService" ref="empService"></property>
</bean>
<!-- implementor 指定webService的服务提供者, 
          支持两种形式:
          一种是:直接给定服务器提供者的类名
          另一种是:设置为容器中的一个Bean
          -->
      <jaxws:endpoint 
   implementor="#helloWorldWS"
   address="/fkservice"
   />
  <!-- <jaxws:endpoint id="classImpl"
    implementor="org.apache.cxf.jaxws.service.Hello"
    endpointName="e:HelloEndpointCustomized"
    serviceName="s:HelloServiceCustomized"
    address="http://localhost:8080/fkservice"
    xmlns:e="http://service.jaxws.cxf.apache.org/endpoint"
    xmlns:s="http://service.jaxws.cxf.apache.org/service"/> -->
    <!--  配置c3p0数据源-->
     
</beans>

2.启动tomcat 输入http://localhost:8090/WS_Spring/fkservice

三。新建一个java工程

输入cmd进入窗口,找到新建的java工程的目录下的src目录,输入wsdl2java 输入上边的http://localhost:8090/WS_Spring/fkservice/fkservice?wsdl 生成客户端代码

新建一个ClientMain,调用相关方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值