在Spring中记录JAX-WS SOAP消息
每当在Spring中使用JAX-WS时,您可能都希望记录传入和传出的SOAP消息-如果仅用于开发过程中的调试。 因此,第一件事就是增加日志级别,对吗? 不幸的是,这将无效。 您将要做的是利用javax.xml.ws.handler.HandlerResolver
接口。 那么我们该怎么做呢?
首先,您将要创建一个实现HandlerResolver
接口的类。 这是一个非常基本的类,将用于控制处理程序链。 它可能看起来像以下内容:
DefaultHandlerResolver
package it.jdev.example.ws;import java.util.List;import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.PortInfo;public class DefaultHandlerResolver implements HandlerResolver {private List<Handler> handlerList;@Overridepublic List<Handler> getHandlerChain(final PortInfo portInfo) {return handlerList;}public void setHandlerList(final List<Handler> handlerList) {this.handlerList = handlerList;}}
然后,我们必须实现将进行实际日志记录的类。 此类将必须实现SOAPHandler<SOAPMessageContext>
接口。 一个非常简单的实现,仅使用SLF4J记录消息:
LoggingHandler
package it.jdev.example.ws;import java.io.ByteArrayOutputStream;
import java.lang.invoke.MethodHandles;
import java.util.Set;import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class LoggingHandler implements SOAPHandler<SOAPMessageContext> {private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());@Overridepublic boolean handleMessage(final SOAPMessageContext context) {final SOAPMessage msg = context.getMessage();final boolean request = ((Boolean) context.get(SOAPMessageContext.MESSAGE_OUTBOUND_PROPERTY)).booleanValue();if (request) { // This is a request message.logMessage(msg);} else { // This is the response messagelogMessage(msg);}return true;}@Overridepublic boolean handleFault(final SOAPMessageContext context) {logMessage(context.getMessage());}private void logMessage(final SOAPMessage msg) {try {// Write the message to the output streamfinal ByteArrayOutputStream baos = new ByteArrayOutputStream();msg.writeTo(baos);LOGGER.info(baos.toString());baos.close();} catch (final Exception e) {LOGGER.error("Caught exception: " + e.getMessage(), e);}}@Overridepublic void close(final MessageContext context) {// Not required for logging}@Overridepublic Set<QName> getHeaders() {// Not required for loggingreturn null;}}
最后,我们必须在Spring中将所有东西连接在一起。 使用xml配置,您要做的就是添加一个新的bean定义:
配置Spring以使用SOAP消息记录器
<bean id="handlerResolver" class="it.jdev.example.ws.DefaultHandlerResolver"><property name="handlerList"><list><bean class="it.jdev.example.ws.LoggingHandler" /></list></property></bean>
这就是全部。 您的应用程序现在应该记录所有JAX-WS SOAP消息。
翻译自: https://www.javacodegeeks.com/2015/05/logging-jax-ws-soap-messages-in-spring.html
在Spring中记录JAX-WS SOAP消息相关推荐
- jax-ws 生成soap_在Spring中记录JAX-WS SOAP消息
jax-ws 生成soap 每当在Spring中使用JAX-WS时,您可能都希望记录传入和传出的SOAP消息-如果仅用于开发过程中的调试. 因此,第一件事就是增加日志级别,对吗? 不幸的是,这将无效. ...
- spring和maven_具有Spring和Maven教程的JAX–WS
spring和maven Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: ...
- 带有Spring和Maven教程的JAX–WS
Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: 公开基于Servlet的 ...
- java http soap_在Spring中发布SOAP HTTP Webservice - Java杂家 - Blo...
通常在Spring发布Hession,RMI等,是非常方便的, 但是要发布SOAP类型的WebService则要依赖一个独立的Servlet容器(如Tomcat+Axis), 这种Webservice ...
- 如何在优雅地Spring 中实现消息的发送和消费
本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...
- 如何在优雅地Spring 中实现消息的发送和消费 1
本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...
- wsdl2java asmx_在WebService asmx中格式化SOAP消息
我在使用SOAP 1.1消息的Web服务中遇到了客户端所需格式的问题,这正是他所期望的: 这就是我现在所拥有的 这就是我的实施方式 [WebService(Namespace = "http ...
- 非分页缓冲池内存不足 Httperr.log 文件中记录消息和Connections_refused 网站不能打开
非分页缓冲池内存不足 Httperr.log 文件中记录消息和"Connections_refused" 问题描述: server2003的iis 运行一段时间后莫名其妙的就不能打 ...
- linux向用户发送消息,Linux终端中向记录的用户发送消息
我如何发送消息到Linux服务器上登录用户? 如果你问这个问题,那么这个指南将帮助你学习如何做到这一点. 我们将演示如何在Linux上的终端上向所有或特定的登录用户发送消息. Linux提供了多种方法 ...
最新文章
- asp.net利用RAR实现文件压缩解压缩【月儿原创】
- HDOJ1871 无题
- 计算机系统的组成doc,《计算机系统的组成》.doc
- 研究生的研究人员发展课程
- win7降低屏幕亮度_深度解析:Redmi K20 Pro 第七代屏幕指纹技术
- 韩顺平php教程笔记,PHP笔记,韩顺平php笔记_PHP教程
- 精选| 2020年8月R新包推荐(第45期)
- SQL 拼接语句输出_一文了解Mybatis中动态SQL的实现
- java中异常抛出后代码还会继续执行吗
- java设置小数位数_java设置小数点后位数
- 使用格式工厂将H264文件转成mp4文件
- 数据库迁移工具-kettle下载
- 【Microsoft Office】免密破解Microsoft Word文档(.docx)的文档保护
- MODIS与Landsat获取LST数据
- SRA数据下载(通过EBI-ENA数据库,使用ASpera)
- html跑马灯(附源码效果图)
- Kelvin Test
- JAXB根据带继承关系的类生成soap请求的XML报文(互转)
- Virtual Box安装Linux
- qq邮箱 北航邮箱配置 foxmail
热门文章
- 《金色梦乡》金句摘抄(十)
- 在gitee上创建自己的仓库步骤
- JAVASE阶段流程图
- ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession()的区别
- Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
- 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案
- (转)使用IDEA将普通MAVEN项目转为WEB项目
- 防止用户重复提交表单数据,session方式,js方式
- ide 日志 乱码_IDE日志分析方法pt。 2
- 光盘 机密_使用保险柜管理机密