本功能主要模拟数据库实现产品的添加与查询功能
服务端
第一步:添加所需的jar包(将CXF下所有的jar包加入到项目中)
第二步:编写productBean
public class Product {
// 产品编号
private int proId;
// 产品名称
private String proName;
// 产品价格
private String proPrice;
public int getProId() {
return proId;
}
public void setProId(int proId) {
this.proId = proId;
}
public String getProName() {
return proName;
}
public void setProName(String proName) {
this.proName = proName;
}
public String getProPrice() {
return proPrice;
}
public void setProPrice(String proPrice) {
this.proPrice = proPrice;
}
第三步:服务器端接口开发(注:必须添加
@
WebService注解
)
package com.pb.cxfspring.dao;
import com.pb.cxfspring.entity.Product;
/**
* 处理产品信息的接口
* @author Administrator
*
*/
@WebService
public interface ProductService {
/**
* 添加产品信息
* @param product
*/
public void addProduct(Product product);
/**
* 根据产品ID获取产品信息
* @param proId
* @return
*/
public Product getProductById(int proId);
}
第四步:接口实现类的开发
package com.pb.cxfspring.dao.impl;
import com.pb.cxfspring.dao.ProductService;
import com.pb.cxfspring.entity.Product;
public class productServiceImpl implements ProductService{
@Override
public void addProduct(Product product) {
// TODO Auto-generated method stub
System.out.println("产品编号:"+product.getProId()+
"产品名称:"+product.getProName()+
"产品价格:"+product.getProPrice());
}
@Override
public Product getProductById(int proId) {
Product product = new Product();
product.setProId(11);
product.setProName("ipad");
product.setProPrice("4500");
return null;
}
}
}
第五步:配置ApplicationContext.xml文件
从下载下来的cxf开发包的samples目录下查找Service-ApplicationContext.xml拷贝至自己的项目中(此时的命名空间已不需要我们更改)
修改
Service-ApplicationContext.xml导入文件
< 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和 Endpoint完整的配置如下<?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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd "> <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="productServiceBean" class="com.pb.cxfspring.dao.impl.productServiceImpl"/> <!-- Endpoint --> <jaxws:endpoint id="productService" address="/productService" implementor="com.pb.cxfspring.dao.impl.productServiceImpl"> </jaxws:endpoint> </beans>
第六步:配置web.xml从下载下来的cxf开发包的samples目录下查找web.xml打开复制粘贴里面用到的配置
第七步:启动tomcat输入http://localhost:8080/CxfWebProject/productService?wsdl
如果出现wsdl文档结构则说明服务器端Webservice配置成功
客户端
第一步:使用cxf中wsdl2java生成客户端代码
配置环境变量: 新建CXF_HOME C:\ProgramFiles(my)\apache-cxf-2.7.2
CLASSPATH %CXF_HOME%\lib
PATH %CXF_HOME%\bin
验证:在cmd中输入wsdl2java -v 若结果显示: wsdl2java - Apache CXF 2.7.2 则表示配置成功
wsdl2java工具使用:
cmd ---> 回车 ---》
wsdl2java -frontend jaxws21 -p com.jiuzi.HelloCXF -d D:\ -client -
autoNameResolution http://localhost:8080/webservice/HelloCXF?wsdl
结果 将会在D盘根目录下生成HelloCXF的客户端代码,将其复制到项目中便可使用
第二步:创建工程添加jar包
第三步:配置client-ApplicationContext.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:context="http://www.springframework.org/schema/context" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:customer="http://customerservice.example.com/" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <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"/> <jaxws:client id="productServiceClient" address="http://localhost:8080/CxfWebProject/productService" serviceClass="com.pb.HelloCxf.ProductService"> </jaxws:client> </beans>
第四步:客户端调用(两种方式)
//方式一:使用Spring容器 public void clientSpring(){ //加载客户端的定义配置 ApplicationContext app = new ClassPathXmlApplicationContext("client-applicationContext.xml"); //获取定义的Webservice Bean ProductService productService = (ProductService)app.getBean("productServiceClient"); Product product = new Product(); product.setProId(11); product.setProName("jorbiee"); product.setProPrice("234"); //调用添加产品的方法 productService.addProduct(product); } //方式二:java语言客户端 public void clientJava(){ //初始化代理工厂 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); //定义服务接口类型 factory.setServiceClass(ProductService.class); //设置服务地址 factory.setAddress("http://localhost:8080/CxfWebProject/productService"); ProductService pro = (ProductService)factory.create(); Product product = new Product(); product.setProId(11); product.setProName("jorbiee"); product.setProPrice("234"); //调用添加产品的方法 pro.addProduct(product); }