SpringBoot2.1.6 整合CXF 实现Webservice

前言

最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口。产品框架用的SpringBoot2.1.6,于是采用整合CXF的方式实现Webservice接口。在这里分享下整合的demo。

代码实现
  1. 项目结构

    直接通过idea生成SpringBoot项目,也可以在http://start.spring.io生成。过于简单,这里不赘述。

    ![1561728847121](

)

  1. POM文件引入。这里引入的版本是3.2.4

    1. <dependency>
    2. <groupId>org.apache.cxf</groupId>
    3. <artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.2.4</version>
    4. </dependency>
  2. 接口与接口实现类

    1. package com.xiaoqiang.cxf.service;
    2. import com.xiaoqiang.cxf.entity.Student;
    3. import javax.jws.WebMethod;
    4. import javax.jws.WebService;
    5. import java.util.List;
    6. /**
    7. * IStudentService <br>
    8. * 〈〉
    9. *
    10. * @author XiaoQiang
    11. * @create 2019-6-27
    12. * @since 1.0.0
    13. */
    14. @WebService(targetNamespace = "http://service.cxf.xiaoqiang.com/") //命名一般是接口类的包名倒序
    15. public interface IStudentService {
    16. @WebMethod //声明暴露服务的方法,可以不写
    17. List<Student> getStudentInfo();
    18. }
    1. package com.xiaoqiang.cxf.service.impl;
    2. import com.xiaoqiang.cxf.entity.Student;
    3. import com.xiaoqiang.cxf.service.IStudentService;
    4. import org.springframework.stereotype.Component;
    5. import javax.jws.WebService;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8. /**
    9. * StudentServiceImpl <br>
    10. * 〈学生接口实现类〉
    11. *
    12. * @author XiaoQiang
    13. * @create 2019-6-27
    14. * @since 1.0.0
    15. */
    16. @WebService(serviceName = "studentService"//服务名
    17. ,targetNamespace = "http://service.cxf.xiaoqiang.com/" //报名倒叙,并且和接口定义保持一致
    18. ,endpointInterface = "com.xiaoqiang.cxf.service.IStudentService")//包名
    19. @Component
    20. public class StudentServiceImpl implements IStudentService {
    21. @Override
    22. public List<Student> getStudentInfo() {
    23. List<Student> stuList = new ArrayList<>();
    24. Student student = new Student();
    25. student.setAge(18);
    26. student.setScore(700);
    27. student.setName("小强");
    28. stuList.add(student);
    29. return stuList;
    30. }
    31. }
  3. 配置类

    1. package com.xiaoqiang.cxf.config;
    2. import com.xiaoqiang.cxf.service.IStudentService;
    3. import org.apache.cxf.Bus;
    4. import org.apache.cxf.jaxws.EndpointImpl;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.context.annotation.Configuration;
    8. import javax.xml.ws.Endpoint;
    9. /**
    10. * CxfConfig <br>
    11. * 〈cxf配置类〉
    12. * @desription cxf发布webservice配置
    13. * @author XiaoQiang
    14. * @create 2019-6-27
    15. * @since 1.0.0
    16. */
    17. @Configuration
    18. public class CxfConfig {
    19. @Autowired
    20. private Bus bus;
    21. @Autowired
    22. private IStudentService studentService;
    23. /**
    24. * 站点服务
    25. * @return
    26. */
    27. @Bean
    28. public Endpoint studentServiceEndpoint(){
    29. EndpointImpl endpoint = new EndpointImpl(bus,studentService);
    30. endpoint.publish("/studentService");
    31. return endpoint;
    32. }
    33. }
  4. 启动Application

    http://ip:端口/项目路径/services/studentService?wsdl 查看生成的wsdl

测试
  1. package com.xiaoqiang.cxf;
  2. import com.xiaoqiang.cxf.entity.Student;
  3. import com.xiaoqiang.cxf.service.IStudentService;
  4. import org.apache.cxf.endpoint.Client;
  5. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  6. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
  7. import org.junit.Test;
  8. import org.junit.runner.RunWith;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.beans.BeanUtils;
  12. import org.springframework.boot.test.context.SpringBootTest;
  13. import org.springframework.test.context.junit4.SpringRunner;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. @RunWith(SpringRunner.class)
  17. @SpringBootTest
  18. public class CxfApplicationTests {
  19. private Logger logger = LoggerFactory.getLogger(CxfApplication.class);
  20. @Test
  21. public void contextLoads() {
  22. }
  23. /**
  24. * 方法一:动态客户端调用
  25. */
  26. @Test
  27. public void DynamicClient(){
  28. JaxWsDynamicClientFactory jwdcf = JaxWsDynamicClientFactory.newInstance();
  29. Client client = jwdcf.createClient("http://localhost:8080/services/studentService?wsdl");
  30. Object[] objects = new Object[0];
  31. try {
  32. objects = client.invoke("getStudentInfo");
  33. logger.info("获取学生信息==>{}",objects[0].toString());
  34. System.out.println("invoke实体:"+((ArrayList) objects[0]).get(0).getClass().getPackage());
  35. for(int i=0 ; i< ((ArrayList)objects[0]).size() ; i++){
  36. Student student = new Student();
  37. BeanUtils.copyProperties(((ArrayList) objects[0]).get(0),student);
  38. logger.info("DynamicClient方式,获取学生{}信息==> 姓名:{},年龄:{},分数:{}",i+1,
  39. student.getName(),student.getAge(),student.getScore());
  40. }
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. /**
  46. * 代理类工厂
  47. */
  48. @Test
  49. public void ProxyFactory(){
  50. String address = "http://localhost:8080/services/studentService?wsdl";
  51. //代理工厂
  52. JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
  53. //设置代理地址
  54. factoryBean.setAddress(address);
  55. //设置接口类型
  56. factoryBean.setServiceClass(IStudentService.class);
  57. //创建一个代理接口实现
  58. IStudentService studentService = (IStudentService) factoryBean.create();
  59. List<Student> studentList = studentService.getStudentInfo();
  60. for(int i=0 ; i< studentList.size() ; i++){
  61. Student student = studentList.get(i);
  62. logger.info("ProxyFactory方式,获取学生{}信息==> 姓名:{},年龄:{},分数:{}",i+1,
  63. student.getName(),student.getAge(),student.getScore());
  64. }
  65. }
  66. }
总结

1.接口与实现类中targetNamespace的注解是一定要写的,指明能够访问的接口

2.targetNamespace,最后面有一个斜线,通常是接口报名的反向顺序

SpringBoot2.1.6 整合CXF 实现Webservice的更多相关文章

  1. SpringMVC4整合CXF发布WebService

    SpringMVC4整合CXF发布WebService版本:SpringMVC 4.1.6,CXF 3.1.0项目管理:apache-maven-3.3.3 pom.xml <project x ...

  2. SpringBoot整合cxf发布webService

    1. 看看项目结构图 2. cxf的pom依赖 1 <dependency>2 <groupId>org.apache.cxf</groupId>3 <art ...

  3. spring mvc + mybaties + mysql 完美整合cxf 实现webservice接口 (服务端、客户端)

    spring-3.1.2.cxf-3.1.3.mybaties.mysql 整合实现webservice需要的完整jar文件 地址:http://download.csdn.net/detail/xu ...

  4. spring-boot整合Cxf的webservice案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.Maven Plugin管理 <?xml version="1.0&q ...

  5. Spring整合CXF之发布WebService服务

    今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...

  6. Spring整合CXF,发布RSETful 风格WebService(转)

    Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Sp ...

  7. CXF整合Spring开发WebService

    刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开 ...

  8. Spring整合CXF步骤,Spring实现webService,spring整合WebService

    Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...

  9. Spring整合CXF,发布RSETful 风格WebService

    原文地址:http://www.cnblogs.com/hoojo/archive/2012/07/23/2605219.html 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有 ...

随机推荐

  1. Cython 的学习

    开发效率极高的 Python 一直因执行效率过低为人所诟病,Cython 由此诞生,特性介于 Python 和 C 语言之间. Cython 学习 1. Cython 是什么? 它是一个用来快速生成 ...

  2. 2013级别C++文章9周(春天的)工程——运算符重载(两)

    课程主页中:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生 ...

  3. jieba(结巴)—— Python 中文分词

    学术界著名的分词器: 中科院的 ICTCLAS,代码并不十分好读 哈工大的 ltp, 东北大学的 NIU Parser, 另外,中文 NLP 和英文 NLP 不太一致的地方还在于,中文首先需要分词,针 ...

  4. Windows 10 子系统Linux重启(不重启Win10)

    Using CMD (Administrator) net stop LxssManager net start LxssManager

  5. UML静态视图——类图、对象图、包图

    绘画类的最重要的图是抽象类.让我们回顾一下类的基本内容. 一.分类 1.类的概念: 面向对象编程的类是一个基本概念.类是具有相同特性的.办法.集合语义和一组对象的关系. 2.类分类: 实体类:保存要放 ...

  6. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...

  7. [Hibernate系列—] 3. 映射文件和使用SchemaExport制作自己主动Schema

    自己定义映射文件 这里的映射文件指的是相应到数据库表的xml 的定义文件. 相应的每一个数据库表栏位, 能够定义的属性有: 属性名 类型 Description length number 栏位的长度 ...

  8. 2-21-源码编译安装LAMP

      编译安装LAMP所需要及其所使用的源码版本: httpd version:httpd-2.4.16 apr version:apr-1.5.2 pcre version:pcre-8.37 apr ...

  9. C# IDisposable接口的使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. WPF 简单打印

    <Window x:Class="_096基本打印.MainWindow"        xmlns="http://schemas.microsoft.com/w ...