博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring和cxf3的整合,以maven的方式
阅读量:7238 次
发布时间:2019-06-29

本文共 3553 字,大约阅读时间需要 11 分钟。

一、引入cxf3

我这里使用的是最新的版本cxf3.1.8

引入cxf3需要在pom.xml加入如下内容:

org.apache.cxf
cxf-rt-frontend-jaxws
3.1.8
org.apache.cxf
cxf-rt-transports-http
3.1.8

 

二、项目中增加对cxf3的支持

1、修改web.xml,增加如下内容不:

CXF Endpoint
cxf
cxf
org.apache.cxf.transport.servlet.CXFServlet
2
cxf
/services/*

2、添加spring的配置文件application-cxf.xml,内容如下(web.xml中扫描spring配置文件需要增加对这个配置文件的扫描):

注意看上面有服务端以及客户端的示例声明,下面会给出编写服务端及客户端的具体代码

 

三、编写服务端代码

1、application-cxf.xml文件中添加声明:

2、接口文件DemoWebservice.java,代码如下:

package com.huarui.web.webservice;import javax.jws.WebService;@WebServicepublic 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文件中添加声明:
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的内容贴出来:

注意看一下,这个QName里面的参数对应的是wsdl:definitions标签里面的targetNamespace属性和name属性

 

六、编写客户端代码(第三种方式)

使用cxf工具里面的wsdl2java生成客户端代码,我参考的这篇文章:

我这里不再介绍这种方法

我生成客户端代码的命令是:

wsdl2java -p com.comp.web.client -d d:\web\client -client http://localhost:8080/App/services/demo?wsdl

 

转载地址:http://hlrfm.baihongyu.com/

你可能感兴趣的文章
websocket多线程问题
查看>>
从上往下打印二叉树
查看>>
决策支持系统是什么?
查看>>
解压缩
查看>>
Linux中curl命令和wget命令的使用介绍与比较
查看>>
shell之awk 记录
查看>>
python内置数据结构之set
查看>>
function_score 之script_score
查看>>
ssh配置客户端免密钥到服务端
查看>>
启动PHP时提示初始化错误
查看>>
复杂recyclerView封装库
查看>>
Java通过POI为Excel添加数据验证
查看>>
140925左右发现的bash重大漏洞
查看>>
Animation 作为ImageView的背景
查看>>
mysql 主从备份实验
查看>>
CentOS下用命令查看IP地址
查看>>
LNMP编译安装遇到问题归总
查看>>
PHP的bbs实现之四--创建调查
查看>>
搭建windows下filezilla FTP服务器
查看>>
View6.2替换VCS和Composer服务器证书
查看>>