SpringBoot2.1.6 整合CXF 实现Webservice
SpringBoot2.1.6 整合CXF 实现Webservice
前言
最近LZ产品需要对接公司内部通讯工具,采用的是Webservice接口。产品框架用的SpringBoot2.1.6,于是采用整合CXF的方式实现Webservice接口。在这里分享下整合的demo。
代码实现
项目结构
直接通过idea生成SpringBoot项目,也可以在http://start.spring.io生成。过于简单,这里不赘述。

POM文件引入。这里引入的版本是3.2.4
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId> <version>3.2.4</version>
</dependency>
接口与接口实现类
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; }
}配置类
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;
}
}启动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的更多相关文章
- SpringMVC4整合CXF发布WebService
SpringMVC4整合CXF发布WebService版本:SpringMVC 4.1.6,CXF 3.1.0项目管理:apache-maven-3.3.3 pom.xml <project x ...
- SpringBoot整合cxf发布webService
1. 看看项目结构图 2. cxf的pom依赖 1 <dependency>2 <groupId>org.apache.cxf</groupId>3 <art ...
- spring mvc + mybaties + mysql 完美整合cxf 实现webservice接口 (服务端、客户端)
spring-3.1.2.cxf-3.1.3.mybaties.mysql 整合实现webservice需要的完整jar文件 地址:http://download.csdn.net/detail/xu ...
- spring-boot整合Cxf的webservice案例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.Maven Plugin管理 <?xml version="1.0&q ...
- Spring整合CXF之发布WebService服务
今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-s ...
- Spring整合CXF,发布RSETful 风格WebService(转)
Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Sp ...
- CXF整合Spring开发WebService
刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开 ...
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
Spring整合CXF步骤 Spring实现webService, spring整合WebService >>>>>>>>>>>> ...
- Spring整合CXF,发布RSETful 风格WebService
原文地址:http://www.cnblogs.com/hoojo/archive/2012/07/23/2605219.html 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有 ...
随机推荐
- delphi之IOCP学习(一)
困扰已久的网络通信(IOCP:完成端口),今天终于揭开她的神秘面纱了,之前百度N久还是未能理解IOCP,网络上好多博文都没有贴出源码,初学者很难正在理解IOCP并自己写出通信例子 ,经过努力,今天自己 ...
- hudson绑定svn和vs2008实现持续构建
作者:朱金灿 来源:http://blog.csdn.net/clever101 首先需要在服务器上安装以下工具: (1)hudson,我推荐从http://hudson-ci.org/downloa ...
- WPF-- 合并资源字典
原文:WPF-- 合并资源字典 1. 合并多个外部资源字典成为本地字典 语言 XAML 示例代码 <Page.Resources> <ResourceDicti ...
- Linux性能测试 mpstat命令
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有 ...
- C/C++回调方式系列之一 函数指针和函数回调模式
一.函数指针 1. 函数的定义 return_type function_name(parameter list) { function_body } return_type: 返回值,函数一定有返回 ...
- 数字证书原理 good
文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理, ...
- Windows程序设计画图实现哆啦A梦
在看雪论坛上看到的一个帖子,很喜欢,转载一下.原文地址:http://bbs.pediy.com/showthread.php?t=138630哆啦A梦是画出来的,不知道作者算这些坐标位置算了多久,真 ...
- 【图文教程】de4dot实战字符串解密(演示:hishop微分销系统)
原文:[图文教程]de4dot实战字符串解密(演示:hishop微分销系统) 前些日子,公司需求开发一个微分销系统,于是找来hishop微分销系统想借鉴一下,没想到里面各种加密,就连字符串也都加密了. ...
- Win8 Metro(C#)数字图像处理--3.3图像直方图计算
原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...
- UWP开发学习笔记1
导航到页面: this.Frame.Navigate(typeof(SecondPage)); 导航进入当前页面时会调用OnNavigatedTo方法:导航从当前页面离开时会调用OnNavigatin ...