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的这个项目示例的延伸,所以有 ...
随机推荐
- python 读写XLS
需要库: xlrd, xlwt, xlutils 导入 import xlrd from xlutils.copy import copy 打开文件 data = xlrd.open_workbook ...
- message contains no documents code:13066 mongdb数据库报的错误
message contains no documents code:13066stackoverflow上面的回答是: What version of the C# driver are you ...
- IOC介绍及其简单实现
预备知识: Java反射原理,XML及其解析 IOC:Inversion of Control,控制反转,它最主要反映的是与传统面向对象(OO)编程的不同.通常我们编程实现某种功能都需要几个对象相 ...
- Java设计模式透析之 —— 单例(Singleton)
写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...
- 用ORACHK自己主动化检查数据库系统的健壮性
1.orachk工具主要用途 (1)主动检查您的整个软件在操作系统.CRS.数据库.高可用等层面中的严重问题,以便于IT部门整改,提升系统的稳定性 (2)对于您系统中存在的风险提供简单化和合理化的诊断 ...
- WPF与缓动(二) 正弦与余弦缓动
原文:WPF与缓动(二) 正弦与余弦缓动 WPF与缓动(二) 正弦与余弦缓动 ...
- VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP
PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了. 它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多 ...
- 消息队列中点对点与发布订阅区别(good)
背景知识 JMS一个在 Java标准化组织(JCP)内开发的标准(代号JSR 914).2001年6月25日,Java消息服务发布JMS 1.0.2b,2002年3月18日Java消息服务发布 1.1 ...
- Delphi7文件操作常用函数
1. AssignFile.Erase AssignFile procedure AssignFile(var F; FileName: string);:给文件变量连接一个外部文件名.这里需要注意的 ...
- 生成wsdl代理c#代码
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe /l:CS /out:d:\ws ...