SpringBoot整合CXF实例:

服务端构建

org.apache.cxf

cxf-spring-boot-starter-jaxws

3.2.5

/*** 作者信息实体

*@authoroKong

**/@Data

@Builder

@AllArgsConstructor

@NoArgsConstructorpublic classAuthorDto {

String name;

Listhobby;

String birthday;

String description;

Sex sex;

}

/*** 性别枚举类

*@authoroKong

**/

public enumSex {

MALE("male"),

FEMALE("female");

String value;

Sex(String value) {this.value =value;

}publicString value() {returnvalue;

}public staticSex fromValue(String v) {for(Sex c : Sex.values()) {if(c.value.equals(v)) {returnc;

}

}throw newIllegalArgumentException(v);

}

}

/*** 创建服务接口

*@authoroKong

**/@WebService(targetNamespace= WsConst.NAMESPACE_URI ,name = "authorPortType")public interfaceAuthorService {/*** 根据名称获取作者信息

*@author作者:oKong*/@WebMethod(operationName="getAuthorByName")

AuthorDto getAuthor(@WebParam(name= "authorName") String name);/*** 获取作者列表信息

*@authoroKong*/@WebMethod

ListgetAuthorList();/*** 返回字符串测试

*@authoroKong*/String getAuthorString(@WebParam(name= "authorName")String name);

}

@WebService(

targetNamespace= WsConst.NAMESPACE_URI, //wsdl命名空间

name = "authorPortType", //portType名称 客户端生成代码时 为接口名称

serviceName = "authorService", //服务name名称

portName = "authorPortName", //port名称

endpointInterface = "cn.lqdev.learning.springboot.cxf.service.AuthorService")//指定发布webservcie的接口类,此类也需要接入@WebService注解

public class AuthorServiceImpl implementsAuthorService{

@OverridepublicAuthorDto getAuthor(String name) {

AuthorDto author= newAuthorDto();

author.setBirthday("1990-01-23");

author.setName("姓名:" +name);

author.setSex(Sex.MALE);

author.setHobby(Arrays.asList("电影","旅游"));

author.setDescription("描述:一枚趔趄的猿。现在时间:" + newDate().getTime());returnauthor;

}

@Overridepublic ListgetAuthorList() {

List resultList = new ArrayList<>();

AuthorDto author= newAuthorDto();

author.setBirthday("1990-01-23");

author.setName("姓名:oKong");

author.setSex(Sex.MALE);

author.setHobby(Arrays.asList("电影","旅游"));

author.setDescription("描述:一枚趔趄的猿。现在时间:" + newDate().getTime());

resultList.add(author);

resultList.add(author);returnresultList;

}

@OverridepublicString getAuthorString(String name) {

AuthorDto author=getAuthor(name);returnauthor.toString();

}

}

@WebService(

targetNamespace= WsConst.NAMESPACE_URI, //wsdl命名空间

name = "authorPortType", //portType名称 客户端生成代码时 为接口名称

serviceName = "authorService", //服务name名称

portName = "authorPortName", //port名称

endpointInterface = "cn.lqdev.learning.springboot.cxf.service.AuthorService")//指定发布webservcie的接口类,此类也需要接入@WebService注解

/*** 常量类

*@authoroKong

**/

public classWsConst {public static final String NAMESPACE_URI = "http://www.lqdev.cn/webservice";

}

/*** cxf配置类

*@authoroKong

**/@Configurationpublic classCxfWebServiceConfig {//这里需要注意 由于springmvc 的核心类 为DispatcherServlet//此处若不重命名此bean的话 原本的mvc就被覆盖了。可查看配置类:DispatcherServletAutoConfiguration//一种方法是修改方法名称 或者指定bean名称//这里需要注意 若beanName命名不是 cxfServletRegistration 时,会创建两个CXFServlet的。//具体可查看下自动配置类:Declaration org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration//也可以不设置此bean 直接通过配置项 cxf.path 来修改访问路径的

@Bean("cxfServletRegistration")publicServletRegistrationBean dispatcherServlet() {//注册servlet 拦截/ws 开头的请求 不设置 默认为:/services/*

return new ServletRegistrationBean(new CXFServlet(), "/ws/*");

}/*** 申明业务处理类 当然也可以直接 在实现类上标注 @Service

*@authoroKong*/@BeanpublicAuthorService authorService() {return newAuthorServiceImpl();

}/** 非必要项*/@Bean(name=Bus.DEFAULT_BUS_ID)publicSpringBus springBus() {

SpringBus springBus= newSpringBus();returnspringBus;

}/** 发布endpoint*/@BeanpublicEndpoint endpoint(AuthorService authorService) {

EndpointImpl endpoint= newEndpointImpl(springBus(), authorService);

endpoint.publish("/author");//发布地址

returnendpoint;

}

}

客户端调用:

org.apache.cxf

cxf-spring-boot-starter-jaxws

3.2.5

右键项目文件---webservice--

WsConst.java:

/*** 常量类

*@authoroKong

**/

public classWsConst {public static final String NAMESPACE_URI = "http://www.lqdev.cn/webservice";public static final String SERVICE_ADDRESS= "http://127.0.0.1:8080/ws/author?wsdl"; //为服务端地址

}

/*** 配置类

*

*@authoroKong

**/@Configurationpublic classCxfClientConfig {/*** 以接口代理方式进行调用 AuthorPortType接口*/@Bean("cxfProxy")publicAuthorPortType createAuthorPortTypeProxy() {

JaxWsProxyFactoryBean jaxWsProxyFactoryBean= newJaxWsProxyFactoryBean();

jaxWsProxyFactoryBean.setServiceClass(AuthorPortType.class);

jaxWsProxyFactoryBean.setAddress(WsConst.SERVICE_ADDRESS);//服务地址:http://127.0.0.1:8080/ws/autho

return(AuthorPortType) jaxWsProxyFactoryBean.create();

}/** 采用动态工厂方式 不需要指定服务接口*/@BeanpublicClient createDynamicClient() {

JaxWsDynamicClientFactory dcf=JaxWsDynamicClientFactory.newInstance();

Client client=dcf.createClient(WsConst.SERVICE_ADDRESS);returnclient;

}

}

/*** 调用示例

*@authoroKong

**/@RestController

@RequestMapping("/cxf")public classDemoController {

@Autowired

Client client;

@Autowired

@Qualifier("cxfProxy")

AuthorPortType authorPort;

@GetMapping("/getauthorstring")publicString getAuthorString(String authorName) {returnauthorPort.getAuthorString(authorName);

}

@GetMapping("/getauthor")publicAuthorDto getAuthor(String authorName) {returnauthorPort.getAuthorByName(authorName);

}

@GetMapping("/getauthorlist")public ListgetAuthorList() {returnauthorPort.getAuthorList();

}

@GetMapping("/dynamic/{operation}")public Object getAuthorStringByDynamic(@PathVariable("operation")String operationName, String authorName) throwsException {//这里就简单的判断了

Object[] objects = null;//client.getEndpoint().getBinding().getBindingInfo().getOperations()

if ("getAuthorList".equalsIgnoreCase(operationName)) {

objects=client.invoke(operationName);

}else if ("getAuthorString".equalsIgnoreCase(operationName)) {

objects=client.invoke(operationName, authorName);

}else if ("getAuthorByName".equalsIgnoreCase(operationName)) {

objects=client.invoke(operationName, authorName);

}else{throw new RuntimeException("无效的调用方法");

}return objects != null && objects.length > 0 ? objects[0] : "返回异常";

}

}

端口号配置:

server.port=8090

启动应用,依次访问。查看是否调用成功。

//为客户端的地址

idea启动webservice_idea使用springboot的webservice基于cxf相关推荐

  1. Springboot 基于CXF构建WebService服务

    前言 最近因为系统需要接入了一个新的支付通道,一般来说都是使用RestApi 来接入,但是本次接入的支付通道为境外支付,使用的WebService,对于WS我们在实际业务中基本上不会用到,所以查阅了一 ...

  2. SpringBoot整合WebService

    WebService是一种传统的SOA技术架构,它不依赖于任何的编程语言,也不依赖于任何的技术平台,可以直接基于HTTP协议实现网络应用间的数据交互. 面向服务架构(SOA)是一个组件模型,它将应用程 ...

  3. java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览

    详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘  要 本 ...

  4. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

  5. WebService基于SoapHeader实现安全认证[webservice][.net][安全][soapheader]

    摘 自: http://blog.sina.com.cn/s/blog_72b7a82d0100yyp8.html WebService基于SoapHeader实现安全认证[webservice][. ...

  6. Springboot毕设项目基于SpringBoot的学生宿舍水电费缴费系统的设计与实现2py81(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目基于SpringBoot的学生宿舍水电费缴费系统的设计与实现2py81(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + ...

  7. springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql)

    springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + H ...

  8. Springboot毕设项目基于Java对运动心跳数据分析系统设计与实现455j4(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目基于Java对运动心跳数据分析系统设计与实现455j4(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8. ...

  9. SpringBoot框架的基于java的疫情期间网课管理系统

    活动地址:毕业季·进击的技术er 博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流.专注于Java技术领域和毕业设计✌ 项目名称 SpringBoot框架的基于java的疫情期间 ...

最新文章

  1. 如何用计算机弹逆战6,逆战星光弹夹使用方法介绍 轻松玩转星光弹
  2. python官网下载步骤linux-linux下安装python
  3. 英特尔Optane固态硬盘年内问世 性能暴增
  4. linux手动注入网络数据_Linux网络 - 数据包的接收过程
  5. 当年,兔子学姐靠这个面试小抄拿了个22k
  6. 如何在验证集加噪声_B端硬件如何开展产品测试?
  7. python socket 大文件_python之socket运用之传输大文件
  8. [转]AAuto编程语言官方站 网站服务条款
  9. 【SQLMap工具-1】SQLMap简介及简单应用实例
  10. Pycharm_EmmyLua断点调试Lua
  11. 无线通信模块的双卡单待
  12. flask框架可以做什么?
  13. java ajax传参问题
  14. UE4 记录 UE4 中贴图
  15. 运用Python——劳拉下棋_四连环游戏_重力四子棋游戏(代码与游戏判定)
  16. 一文弄懂原子性、临界区、临界资源
  17. java读取gpx文件格式,GPX文件格式适用于GPS定位的模拟以及生成文件
  18. 穷爸爸与富爸爸读后感(3)
  19. T12焊台和JBC焊台自制资料(原理和电路)
  20. 跟庄买股票得新技巧(2023.05.16)(绝密资料,只发一次)

热门文章

  1. centos 安装jdk_Centos7下安装一个或多个tomcat7完整
  2. python自动化办公培训_python-自动化办公
  3. c轴 t轴 l轴_气涨轴-气胀轴
  4. Python如何发布程序
  5. matlab 二维高斯滤波 傅里叶_光电图像处理 | 傅里叶变换(二)
  6. 均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN
  7. Arduino--1838红外遥控
  8. jpa 根据主键生成策略获取id_JPA主键生成策略
  9. mysal向一个无法连接的网络尝试了一个套接字操作 0.0.3.235_第十二章 Java网络编程(3)——套接字(上)...
  10. 小程序分享,获取openid