一、引入jar包
通过maven导入 org.apache.cxf
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.2.4</version>
</dependency>
二、WebService接口与实现类
1. WebService服务端接口创建
package cn.ty.start.webService;
import cn.ty.start.vo.*;
import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.ResponseWrapper;
@WebService(name = "RmsPort", // 暴露服务名称
targetNamespace = "http://webService.start.ty.cn"// 命名空间,一般是接口的包名倒序
)
public interface RmsPort {
@WebMethod
public @WebResult(name = "result") String sayHello(String user);
@WebMethod
@ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
public InfoResultResponse info(InfoRequest infoRequest);
@WebMethod
@ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
public JobResultResponse job(JobRequest jobRequest);
@WebMethod
@ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
public CancelResultResponse cancel(CancelRequest cancelRequest);
@WebMethod
@ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
public StatusResultResponse status(StatusRequest statusRequest);
}
2. 创建服务端接口实现类
package cn.ty.start.webService.impl;
import cn.ty.start.vo.*;
import cn.ty.start.webService.RmsPort;
import org.springframework.stereotype.Component;
import javax.jws.WebService;
@WebService(targetNamespace = "http://webService.start.ty.cn", // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = "cn.ty.start.webService.RmsPort"// 接口地址
)
@Component
public class RmsPortImplEx implements RmsPort {
@Override
public String sayHello(String user) {
return "123123";
}
@Override
public InfoResultResponse info(InfoRequest infoRequest) {
return null;
}
@Override
public JobResultResponse job(JobRequest jobRequest) {
JobResultResponse jobResultResponse = new JobResultResponse();
return jobResultResponse;
}
@Override
public CancelResultResponse cancel(CancelRequest cancelRequest) {
return null;
}
@Override
public StatusResultResponse status(StatusRequest statusRequest) {
return null;
}
}
3. 创建服务端接口访问Vo类
/**
* 接口请教类
*/
public class InfoRequest {
public String params;
}
/**
* 接口返回类
*/
public class InfoResultResponse {
public String result;
}
4. 创建CXF配置类
WebService地址默认会在 endpoint.publish("/rms") 前加上 /services/,如下配置 /rms ,则访问地址为http://172.16.98.145:8080/RCS_Simulation/services/rms?wsdl
package cn.ty.start.webService;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.xml.ws.Endpoint;
@Configuration
public class CxfConfig {
@Resource
private Bus bus;
@Resource
private RmsPort rmsPort;
/*
* 发布endpoint
*/
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(bus, rmsPort);
endpoint.publish("/rms");// 发布地址
return endpoint;
}
}
5. 启动服务后,在浏览器访问WebService地址,成功则搭建完成

6. 编写Demo测试访问
package cn.ty.start.webService;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
public class CxfClient {
public static void main1(String[] args) {
//创建动态客户端
JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
Client client = factory.createClient("http://172.16.98.145:8080/RCS_Simulation/services/rms?wsdl");
// 需要密码的情况需要加上用户名和密码
//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(2000); //连接超时
httpClientPolicy.setAllowChunking(false); //取消块编码
httpClientPolicy.setReceiveTimeout(120000); //响应超时
conduit.setClient(httpClientPolicy);
//client.getOutInterceptors().addAll(interceptors);//设置拦截器
try {
Object[] objects = new Object[0];
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("sayHello", "sujin");
System.out.println("返回数据:" + objects[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
本文介绍如何在Spring Boot项目中使用CXF框架搭建WebService服务。主要内容包括引入依赖、定义WebService接口及其实现类、创建请求响应对象、配置CXF并测试服务访问。

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



