springboot 配置webservice接口

导入依赖的jar

<!-- webservice cxf --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.6</version></dependency>

创建webservice配置类

import com.xbsafe.webservice.service.DemoService;
import com.xbsafe.webservice.service.DemoServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.xml.ws.Endpoint;@Configuration
public class CxfConfig {@Beanpublic ServletRegistrationBean dispatcherServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/demo/*");servletRegistrationBean.setName("webService");return servletRegistrationBean;}@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}@Beanpublic DemoService demoJsonService(){return new DemoServiceImpl();}@Beanpublic Endpoint endpoint() {EndpointImpl endpoint = new EndpointImpl(springBus(), demoJsonService());endpoint.publish("/ws");endpoint.getInInterceptors().add(new WsInterceptor()); //add webservice inteceptorreturn endpoint;}
}

创建webservice拦截器类

import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.interceptor.AbstractLoggingInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.io.DelegatingInputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.slf4j.LoggerFactory;import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.logging.Logger;public class WsInterceptor extends AbstractLoggingInterceptor {private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(WsInterceptor.class);public WsInterceptor() {super(Phase.RECEIVE);}@Overridepublic void handleMessage(Message message) throws Fault {InputStream is = message.getContent(InputStream.class);if(is!=null){CachedOutputStream bos = new CachedOutputStream();if (threshold > 0) {bos.setThreshold(threshold);}try {// use the appropriate input stream and restore it laterInputStream bis = is instanceof DelegatingInputStream? ((DelegatingInputStream)is).getInputStream() : is;//only copy up to the limit since that's all we need to log//we can stream the restIOUtils.copyAtLeast(bis, bos, limit == -1 ? Integer.MAX_VALUE : limit);bos.flush();bis = new SequenceInputStream(bos.getInputStream(), bis);// restore the delegating input stream or the input streamif (is instanceof DelegatingInputStream) {((DelegatingInputStream)is).setInputStream(bis);} else {message.setContent(InputStream.class, bis);}bos.close();} catch (Exception e) {throw new Fault(e);}finally{LOGGER.info(bos.toString());}}}@Overrideprotected Logger getLogger() {// TODO Auto-generated method stubreturn null;}
}

接口

package com.xbsafe.webservice.service;import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;@WebService
public interface DemoService {@WebMethodpublic String test(@WebParam(name="param") String param);
}
© 2019 GitHub, Inc.

接口实现类

public class DemoServiceImpl implements DemoService {@Overridepublic String test(String param) {return "webservice demo get param:"+param;}
}

测试:
在这里插入图片描述
注意事项:

springboot在配置webservice之后发现原来在controller里面写的get或post接口不能访问了,原因是springboot默认注册的是 dispatcherServlet,当

手动配置 ServletRegistrationBean 之后便不会再去注册默认的dispatcherServlet,此时需要手动去注册一个dispatcherServlet,代码如下:

/*** 注册一个dispatcherServlet,解决增加ws之后http接口访问不了问题*/@Beanpublic ServletRegistrationBean restServlet(){//注解扫描上下文AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();//base packageapplicationContext.scan("com.xbsafe");//通过构造函数指定dispatcherServlet的上下文DispatcherServlet rest_dispatcherServlet = new DispatcherServlet(applicationContext);//用ServletRegistrationBean包装servletServletRegistrationBean registrationBean = new ServletRegistrationBean(rest_dispatcherServlet);registrationBean.setLoadOnStartup(1);//指定urlmappingregistrationBean.addUrlMappings("/*");//指定name,如果不指定默认为dispatcherServletregistrationBean.setName("rest");return registrationBean;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Django】认证系统

目录 #. auth模块1. 认证 authenticate()2. 登陆 login(HttpRequest, user)3. 注销 logout(request)4. 认证判断 is_authenticated()5. 登陆校验 login_requierd()6. 创建普通用户 create_user()7. 创建超级用户 create_superuser()8. 密码校验 check_password(password)9. 修改…

尝试修改源码需要用到git存一下

git reflog查看本地记录 git reset --hard 02a3260 转载于:https://www.cnblogs.com/smzd/p/8492065.html

poj3713 Transferring Sylla 枚举+tarjan判割点

其实就是判断是否为三连通图 三连通图指的是去掉3个点就不连通的图&#xff0c;但是并没有直接求三连通的算法。著名的Tarjan算法可以求解连通和割点&#xff0c;再枚举删除一个点就能达到三连通的目的。 先看用例2&#xff0c;是由用例1去掉一条边而变成非三连通图的&#xff…

Linux 安装Zookeeper单机版(使用Mac远程访问)

阅读本文需要先阅读安装Zookeeper<准备> 新建目录 mkdir /usr/local/zookeeper 解压 cd zookeeper压缩包所在目录 tar -xvf zookeeper-3.4.12.tar.gz -C /usr/local/zookeeper 新建目录 mkdir /usr/local/zookeeper/zookeeper-3.4.12/data 配置文件准备 cp /usr/local/zo…

深入vue

转载于:https://www.cnblogs.com/smzd/p/8547748.html

html--form表单常用操作

form表单 用于收集用户信息&#xff0c;如&#xff1a;登录、注册等场景&#xff1b;所有要提交的数据都必须放在form标签中<form action" " method" "> action&#xff1a;提交地址、动作&#xff0c;与input标签中type标签的submit属性相关联。 &…

MySQL触发器(转载)

触发器&#xff08;trigger&#xff09;是数据库中的一个很重要的、很实用的基于事件的处理器&#xff0c;在处理一些业务需求的时候&#xff0c;使用触发器会很方便。似乎在《高性能MySQL》中&#xff0c;对触发器作了一定的描述&#xff0c;也提到使用中的一些优势和局限性&a…

神级bug解决方法

真的是神级bug,util包中的Arrays类导入不了&#xff0c;一直报错。原因&#xff1a;JDK 1.8和Myeclipse 8.5不兼容&#xff0c;导致java.util.Arrays类无法被编译。所以报错。解决方法&#xff1a;1.降低jdk版本。2.升高Myeclipse版本转载于:https://www.cnblogs.com/yanlongw/…

es6注意点

补救方法&#xff1a; 详情&#xff1a;http://es6.ruanyifeng.com/#docs/array 取出文本内容 实现深拷贝 jq实现不完全深拷贝 jQuery.extend jQuery.fn.extend function () {var options, name, src, copy, copyIsArray, clone,target arguments[0] || {},i 1,length ar…

input标签用法解读

HTML5/HTML中标签用法解读 OK&#xff01;今天博主为小伙伴们介绍的内容是HTML5/HTML中标签的用法&#xff0c;&#xff0c;&#xff0c; &#xff0c;emmm图文并茂哦&#xff01; 下面正式开始内容的介绍&#xff1a;首先&#xff0c;直观上说标签规定了用户可以在其中输入数据…

软件开发文档整理(之)一张示意图 | 清晰明了

在整个软件开发周期&#xff0c;开发文档是必不可少的资料&#xff0c;它们贯穿于整个开发周期&#xff0c;用来评估计划、规划进度、项目管理、软件测试、软件发布&#xff0c;可以说至关重要。   开发文档必须归档&#xff0c;没有归档的文档作用大打折扣&#xff0c;时效性…

《SQL Server 2008从入门到精通》--20180717

目录 1.触发器1.1.DDL触发器1.2.DML触发器1.3.创建触发器1.3.1.创建DML触发器1.3.2.创建DDL触发器1.3.3.嵌套触发器1.3.4.递归触发器1.4.管理触发器1.触发器 触发器是一种特殊的存储过程&#xff0c;与表紧密关联。 1.1.DDL触发器 当服务器或数据库中发生数据定义语言&#xff…

主成分分析原理解释(能力工场小马哥)

主成分分析&#xff08;Principal components analysis&#xff09;-最大方差解释 在这一篇之前的内容是《Factor Analysis》&#xff0c;由于非常理论&#xff0c;打算学完整个课程后再写。在写这篇之前&#xff0c;我阅读了PCA、SVD和LDA。这几个模型相近&#xff0c;却都有自…

vue全面介绍--全家桶、项目实例

简介 “简单却不失优雅&#xff0c;小巧而不乏大匠”。 2016年最火的前端框架当属Vue.js了&#xff0c;很多使用过vue的程序员这样评价它&#xff0c;“vue.js兼具angular.js和react.js的优点&#xff0c;并剔除了它们的缺点”。授予了这么高的评价的vue.js&#xff0c;也是开…

吴恩达机器学习笔记 —— 9 神经网络学习

本章讲述了神经网络的起源与神经元模型&#xff0c;并且描述了前馈型神经网络的构造。 更多内容参考 机器学习&深度学习 在传统的线性回归或者逻辑回归中&#xff0c;如果特征很多&#xff0c;想要手动组合很多有效的特征是不现实的&#xff1b;而且处理这么大的特征数据量…

vue.js开发环境搭建

环境准备 Node.js Javascript的运行时环境npm Node.js下的包管理工具webpack 前端资源模块化管理和打包工具vue-cli 脚手架构建工具cnpm npm的淘宝镜像 Vue.js安装 Node.js的安装非常容易&#xff0c;首先从官网下载你所需操作系统的版本&#xff0c;然后一直下一步就ok&…

正则基础知识

创建正则表达式 1.使用new来创建 var exp new RegExp(box , gi );g 全局匹配 i 忽略大小写 m 多行匹配2.使用字面量 var exp /box/gi; 直接用2个 / ; 在俩个斜杠后加上模式修饰符&#xff1b; 俩种创建方式比较: 1.使用字面量方式创建用的更加广泛; 2.当要匹配的内容是变量时,…

Promise实践

var doSomething function() { return new Promise((resolve, reject) > { resolve(返回值); }); };let doSomethingElse function() { return 新的值; }doSomething().then(function () { return doSomethingElse(); }).then(resp > { console.warn(resp); console.wa…

JsonBuilder初出茅庐

互联网这股东风不久前刮到了甘凉国&#xff0c;国王老甘独具慧眼&#xff0c;想赶紧趁着东风未停大力发展移动互联网&#xff0c;因为他笃信布斯雷的理论&#xff1a;“站在风口上&#xff0c;猪都能飞起来”。无奈地方偏僻落后&#xff0c;国内无可用之才啊。老甘一筹莫展的低…

Nexus介绍

转自&#xff1a;https://www.cnblogs.com/wincai/p/5599282.html 开始在使用Maven时&#xff0c;总是会听到nexus这个词&#xff0c;一会儿maven&#xff0c;一会儿nexus&#xff0c;当时很是困惑&#xff0c;nexus是什么呢&#xff0c;为什么它总是和maven一起被提到呢&#…