Spring和cxf3的整合,以maven的方式
一、引入cxf3
我这里使用的是最新的版本cxf3.1.8
引入cxf3需要在pom.xml加入如下内容:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.8</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.8</version>
</dependency>
二、项目中增加对cxf3的支持
1、修改web.xml,增加如下内容不:
<!-- cxf webservices -->
<servlet>
<description>CXF Endpoint</description>
<display-name>cxf</display-name>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
2、添加spring的配置文件application-cxf.xml,内容如下(web.xml中扫描spring配置文件需要增加对这个配置文件的扫描):
<?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"> <import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <!-- Cxf WebService 服务端示例 -->
<jaxws:endpoint id="DemoWebservice" implementor="com.comp.web.webservice.impl.DemoWebserviceImpl" address="/demo"/> <!-- Cxf WebService 客户端示例 -->
<jaxws:client id="demoClient" serviceClass="com.comp.web.webservice.DemoWebservice" address="http://localhost:8080/App/services/demo?wsdl" /> </beans>
注意看上面有服务端以及客户端的示例声明,下面会给出编写服务端及客户端的具体代码
三、编写服务端代码
1、application-cxf.xml文件中添加声明:
<!-- Cxf WebService 服务端示例 -->
<jaxws:endpoint id="DemoWebservice" implementor="com.comp.web.webservice.impl.DemoWebserviceImpl" address="/demo"/>
2、接口文件DemoWebservice.java,代码如下:
package com.huarui.web.webservice; import javax.jws.WebService; @WebService
public interface DemoWebservice { public String queryBaseTx(); public String queryBaseTxById(String id);
}
3、实现文件DemoWebserviceImpl.java,代码如下:
package com.comp.web.webservice.impl; import java.util.List; import javax.jws.WebService; import org.springframework.beans.factory.annotation.Autowired; import com.google.gson.Gson;
import com.comp.mapping.entity.BasetxEntity;
import com.comp.service.jdbc.BasetxService;
import com.comp.web.webservice.DemoWebservice; @WebService(endpointInterface = "com.comp.web.webservice.DemoWebservice")
public class DemoWebserviceImpl implements DemoWebservice { @Autowired
private BasetxService basetxService; public String queryBaseTx() {
List list = basetxService.findAll();
return new Gson().toJson(list);
} public String queryBaseTxById(String id) {
BasetxEntity basetx = basetxService.findById(id);
return new Gson().toJson(basetx);
} }
重启项目,用这个地址就可以访问我们创建的服务列表了 http://localhost:8080/App/services/
对于我们刚才创建的服务的访问地址为:http://localhost:8080/App/services/demo?wsdl
路径中services对应的是web.xml文件中配置的内容
demo?wsdl对应的是application-cxf.xml文件中的address属性
四、编写客户端代码
1、application-cxf.xml文件中添加声明:
<!-- Cxf WebService 客户端示例 -->
<jaxws:client id="demoClient" serviceClass="com.comp.web.webservice.DemoWebservice" address="http://localhost:8080/App/services/demo?wsdl" />
2、controller类中,添加如下代码:
@Autowired
@Qualifier("demoClient")
private DemoWebservice demo; ...... String result = demo.queryBaseTx();
System.out.println(result);
com.comp.web.webservice.DemoWebservice是基于服务端的接口实现,本来是要重新写的,我这里偷了个懒,直接用了服务端的代码
Qualifier注解里面的demoClient对应的是application-cxf.xml配置里面jaxws:client标签的id属性
com.comp.web.webservice.DemoWebservice是接口,没有实现类,通过jaxws:client标签调用服务地址生成实现类
五、编写客户端代码(第二种方式)
这种方式不需要配置application-cxf.xml文件
在controller类中,添加如下代码:
URL wsdlURL = new URL("http://localhost:8080/App/services/demo?wsdl");
QName SERVICE_NAME = new QName("http://impl.webservice.web.comp.com/", "DemoWebserviceImplService");
Service service = Service.create(wsdlURL, SERVICE_NAME);
DemoWebservice client = service.getPort(DemoWebservice.class);
String result = client.queryBaseTx();
System.out.println(result);
我建议使用第一种方式,第二种方式这个QName需要从服务端接口里去找,然后我想说的是,QName并不太好找,写错了代码执行会报错。
我这里把我生成的服务端wsdl的内容贴出来:
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.webservice.web.huarui.com/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://webservice.web.huarui.com/"
name="DemoWebserviceImplService" targetNamespace="http://impl.webservice.web.comp.com/">
<wsdl:import location="http://localhost:8080/App/services/demo?wsdl=DemoWebservice.wsdl" namespace="http://webservice.web.comp.com/"></wsdl:import>
<wsdl:binding name="DemoWebserviceImplServiceSoapBinding" type="ns1:DemoWebservice">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="queryBaseTx">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="queryBaseTx">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="queryBaseTxResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="queryBaseTxById">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="queryBaseTxById">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="queryBaseTxByIdResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DemoWebserviceImplService">
<wsdl:port binding="tns:DemoWebserviceImplServiceSoapBinding" name="DemoWebserviceImplPort">
<soap:address location="http://localhost:8080/App/services/demo"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
注意看一下,这个QName里面的参数对应的是wsdl:definitions标签里面的targetNamespace属性和name属性
六、编写客户端代码(第三种方式)
使用cxf工具里面的wsdl2java生成客户端代码,我参考的这篇文章:http://blog.csdn.net/hu_shengyang/article/details/38384839
我这里不再介绍这种方法
我生成客户端代码的命令是:
wsdl2java -p com.comp.web.client -d d:\web\client -client http://localhost:8080/App/services/demo?wsdl
Spring和cxf3的整合,以maven的方式的更多相关文章
- 基于dubbo的SSM(Spring,SpringMvc,Mybatis)整合的Maven多工程(下)
上篇是SSM的maven单工程(http://www.cnblogs.com/yuanjava/p/6748956.html).中篇是 SSM的maven多工程(http://www.cnblogs. ...
- Spring 3整合Quartz 2实现定时任务一:常规整合 (基于maven构建)
最近工作中需要用到定时任务的功能,虽然Spring3也自带了一个轻量级的定时任务实现,但感觉不够灵活,功能也不够强大.在考虑之后,决定整合更为专业的Quartz来实现定时任务功能. 首先,当然是添加依 ...
- Spring 3整合Quartz 1实现定时任务一:常规整合(基于maven构建)
Spring配置Quartz例子(基于maven构建) 在Spring中使用Quartz有两种方式实现:第一种是任务类继承QuartzJobBean,第二种则是在配置文件里定义任务类和要执行的方法,类 ...
- 基于maven进行spring 和mybatis的整合(Myeclpise)
学习日记:基于maven进行spring和mybatis的整合,进行分页查询 什么是maven:maven是一个项目管理工具,使用maven可以自动管理java项目的整个生命周期,包括编译.构建.测试 ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
写在前面的话 承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...
- mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)
文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...
- mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)
继续 mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上) 五.使用监听器启动Spring容器 1.修改pom.xml文件,添加Spring-we ...
- MongoDB 学习(三)MongoDB 和 Spring 整合(Maven)
一.MongoDB 和 Spring 整合(Maven) 1.相关 jar 包准备 2.用 Maven 创建项目,pom.xml 文件 <project xmlns="http://m ...
- Spring与Quartz的整合实现定时任务调度
摘自: http://kevin19900306.iteye.com/blog/1397744 最近在研究Spring中的定时任务功能,最好的办法当然是使用Quartz来实现.对于一个新手来说,花了我 ...
随机推荐
- JS无缝滚动
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...
- .net 泛型运用
DAL层 private DbContext MyContext; public BaseRepository(DbContext context) { MyContext = context; } ...
- 【细说Java】path和classpath的作用
path:javac.exe和java.exe等可执行文件存放路径,通过path变量让系统寻找该路径的可执行文件,然后对Java代码进行编译和运行. ps:如果有多个jdk版本的赋给path变量,系统 ...
- submit(提交)按钮
为form添加一个submit(提交)按钮,点击这个按钮,表单中的数据将会被发送到通过action属性指定的地址上. 下面是submit按钮的例子: <button type="sub ...
- 河南省第六届ACM程序设计大赛
C: 最舒适的路线 (并查集) #include<cstdio> #include<cstring> #include<iostream> #include< ...
- 看起来像一个输入框的input,实际上是有两个input
看起来像一个输入框的input,实际上是有两个input
- curl+ post/get 提交
//测试 内容 固定为 你好 post $curlPost = 'mobile='.$mobile.'&message='.$message.'&memberId='.$member ...
- java知识点--重写与重载
重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现. ...
- [ALM]一步一步搭建MS ALM环境 - 安装域服务器
描述: 搭建并配置域服务器,先安装操作系统,配置网络,安装组件,配置域帐号 步骤: 1,打开Hyper-V Manager,参考[Hyper-V]使用操作系统模板创建新的虚拟机,先完成操作系统的安装, ...
- 作业七:团队项目——Alpha版本冲刺阶段-03
昨天进展:完善界面设计以及象棋图片的绘制 存在问题:人力不足,任务量大. 今天安排:象棋图片的绘制