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

被折叠的 条评论
为什么被折叠?



