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

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

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

    package com.xiaoqiang.cxf.config;
    
    import com.xiaoqiang.cxf.service.IStudentService;
    import org.apache.cxf.Bus;
    import org.apache.cxf.jaxws.EndpointImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import javax.xml.ws.Endpoint;
    /**
    * CxfConfig <br>
    * 〈cxf配置类〉
    * @desription cxf发布webservice配置
    * @author XiaoQiang
    * @create 2019-6-27
    * @since 1.0.0
    */
    @Configuration
    public class CxfConfig { @Autowired
    private Bus bus; @Autowired
    private IStudentService studentService; /**
    * 站点服务
    * @return
    */
    @Bean
    public Endpoint studentServiceEndpoint(){
    EndpointImpl endpoint = new EndpointImpl(bus,studentService);
    endpoint.publish("/studentService");
    return endpoint;
    }
    }
  4. 启动Application

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

测试
package com.xiaoqiang.cxf;

import com.xiaoqiang.cxf.entity.Student;
import com.xiaoqiang.cxf.service.IStudentService;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List; @RunWith(SpringRunner.class)
@SpringBootTest
public class CxfApplicationTests {
private Logger logger = LoggerFactory.getLogger(CxfApplication.class);
@Test
public void contextLoads() {
}
/**
* 方法一:动态客户端调用
*/
@Test
public void DynamicClient(){ JaxWsDynamicClientFactory jwdcf = JaxWsDynamicClientFactory.newInstance();
Client client = jwdcf.createClient("http://localhost:8080/services/studentService?wsdl");
Object[] objects = new Object[0]; try {
objects = client.invoke("getStudentInfo");
logger.info("获取学生信息==>{}",objects[0].toString());
System.out.println("invoke实体:"+((ArrayList) objects[0]).get(0).getClass().getPackage());
for(int i=0 ; i< ((ArrayList)objects[0]).size() ; i++){
Student student = new Student();
BeanUtils.copyProperties(((ArrayList) objects[0]).get(0),student);
logger.info("DynamicClient方式,获取学生{}信息==> 姓名:{},年龄:{},分数:{}",i+1,
student.getName(),student.getAge(),student.getScore());
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 代理类工厂
*/
@Test
public void ProxyFactory(){ String address = "http://localhost:8080/services/studentService?wsdl";
//代理工厂
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
//设置代理地址
factoryBean.setAddress(address);
//设置接口类型
factoryBean.setServiceClass(IStudentService.class);
//创建一个代理接口实现
IStudentService studentService = (IStudentService) factoryBean.create();
List<Student> studentList = studentService.getStudentInfo();
for(int i=0 ; i< studentList.size() ; i++){
Student student = studentList.get(i);
logger.info("ProxyFactory方式,获取学生{}信息==> 姓名:{},年龄:{},分数:{}",i+1,
student.getName(),student.getAge(),student.getScore());
}
} }
总结

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. yii2.0表单《《提交》》变量设置

    public $enableCsrfValidation = false;

  2. Android Studio:Grade 全局参数定义

    Grade 全局参数定义 实际开发中设置公共的编译依赖参数等. 方法一: 在项目外层的build.gradle文件中定义,格式如下: 文件名:build.gradle ext { sourceComp ...

  3. C++第11周(春)项目4 - 类族的设计

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...

  4. WPF 3D 获取鼠标在场景的3d坐标

    原文:WPF 3D 获取鼠标在场景的3d坐标 上一篇中我们谈到了WPF 3d做图的一些简单原理,这里我们简单介绍一下怎样获得鼠标在场景中的3d坐标,知道了3d坐标就可以进行很多操作了: 首先介绍一下3 ...

  5. 新浪微博Python客户端接口OAuth2

    Keyword: Python Oauth2 微博 sina weibo #!/usr/bin/env python # -*- coding: utf-8 -*- __version__ = '1. ...

  6. uwp - 解决“Microsoft.EntityFrameworkCore.Tools –Pre因为在此系统上禁止运行脚本”

    在uwp使用ef时,需要安装“Microsoft.EntityFrameworkCore.Tools –Pre” ,如果安装失败提示:“无法加载文件 \.nuget\packages\Microsof ...

  7. 图解Http协议 url长度限制

    http请求报文的格式 一般请求所带有的属性: http响应报文的格式: 响应首部一般包含如下内容: 一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP ...

  8. easyui的datebox最简单的方法来格式化

    看了网上有很多解决方案,我也写了一个比较简单的方法. 实现easyui的datebox格式化. 效果例如以下.用"++"隔开,看你喜欢用什么都能够. 1.html <span ...

  9. Qt翻译---Thread Support in Qt

    Thread Support in Qt QT提供线程支持在平台独立的线程类.一个安全线程的传递事件的方式,一个信号槽的链接在线程之中.这使得开发多线程容易.多线程程序也是一个有用的范例为不冻结用户界 ...

  10. jquery.cookie.js用法详解

    创建一个会话cookie: $.cookie(‘cookieName’,'cookieValue’); 注:当没有指明cookie时间时,所创建的cookie有效期默认到用户浏览器关闭止,故被称为会话 ...