java的cxf的maven_Spring和cxf3的整合,以maven的方式

本文详细介绍如何使用CXF3.1.8搭建Web服务,包括配置pom.xml、web.xml和Spring配置文件,实现服务端接口和服务逻辑,并提供两种客户端调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、引入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配置文件需要增加对这个配置文件的扫描):

http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

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

三、编写服务端代码

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

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

packagecom.huarui.web.webservice;importjavax.jws.WebService;

@WebServicepublic interfaceDemoWebservice {publicString queryBaseTx();publicString queryBaseTxById(String id);

}

3、实现文件DemoWebserviceImpl.java,代码如下:

packagecom.comp.web.webservice.impl;importjava.util.List;importjavax.jws.WebService;importorg.springframework.beans.factory.annotation.Autowired;importcom.google.gson.Gson;importcom.comp.mapping.entity.BasetxEntity;importcom.comp.service.jdbc.BasetxService;importcom.comp.web.webservice.DemoWebservice;

@WebService(endpointInterface= "com.comp.web.webservice.DemoWebservice")public class DemoWebserviceImpl implementsDemoWebservice {

@AutowiredprivateBasetxService basetxService;publicString queryBaseTx() {

List list=basetxService.findAll();return newGson().toJson(list);

}publicString queryBaseTxById(String id) {

BasetxEntity basetx=basetxService.findById(id);return newGson().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")privateDemoWebservice 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属性

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

我这里不再介绍这种方法

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值