每当在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消息相关推荐

  1. jax-ws 生成soap_在Spring中记录JAX-WS SOAP消息

    jax-ws 生成soap 每当在Spring中使用JAX-WS时,您可能都希望记录传入和传出的SOAP消息-如果仅用于开发过程中的调试. 因此,第一件事就是增加日志级别,对吗? 不幸的是,这将无效. ...

  2. spring和maven_具有Spring和Maven教程的JAX–WS

    spring和maven Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: ...

  3. 带有Spring和Maven教程的JAX–WS

    Spring框架通过JAX-WS提供对Web服务的远程支持,实际上,如Spring 参考文档中所述 ,有三种将Spring POJO服务公开为JAX-WS Web服务的方式: 公开基于Servlet的 ...

  4. java http soap_在Spring中发布SOAP HTTP Webservice - Java杂家 - Blo...

    通常在Spring发布Hession,RMI等,是非常方便的, 但是要发布SOAP类型的WebService则要依赖一个独立的Servlet容器(如Tomcat+Axis), 这种Webservice ...

  5. 如何在优雅地Spring 中实现消息的发送和消费

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  6. 如何在优雅地Spring 中实现消息的发送和消费 1

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  7. wsdl2java asmx_在WebService asmx中格式化SOAP消息

    我在使用SOAP 1.1消息的Web服务中遇到了客户端所需格式的问题,这正是他所期望的: 这就是我现在所拥有的 这就是我的实施方式 [WebService(Namespace = "http ...

  8. 非分页缓冲池内存不足 Httperr.log 文件中记录消息和Connections_refused 网站不能打开

    非分页缓冲池内存不足 Httperr.log 文件中记录消息和"Connections_refused" 问题描述: server2003的iis 运行一段时间后莫名其妙的就不能打 ...

  9. linux向用户发送消息,Linux终端中向记录的用户发送消息

    我如何发送消息到Linux服务器上登录用户? 如果你问这个问题,那么这个指南将帮助你学习如何做到这一点. 我们将演示如何在Linux上的终端上向所有或特定的登录用户发送消息. Linux提供了多种方法 ...

最新文章

  1. asp.net利用RAR实现文件压缩解压缩【月儿原创】
  2. HDOJ1871 无题
  3. 计算机系统的组成doc,《计算机系统的组成》.doc
  4. 研究生的研究人员发展课程
  5. win7降低屏幕亮度_深度解析:Redmi K20 Pro 第七代屏幕指纹技术
  6. 韩顺平php教程笔记,PHP笔记,韩顺平php笔记_PHP教程
  7. 精选| 2020年8月R新包推荐(第45期)
  8. SQL 拼接语句输出_一文了解Mybatis中动态SQL的实现
  9. java中异常抛出后代码还会继续执行吗
  10. java设置小数位数_java设置小数点后位数
  11. 使用格式工厂将H264文件转成mp4文件
  12. 数据库迁移工具-kettle下载
  13. 【Microsoft Office】免密破解Microsoft Word文档(.docx)的文档保护
  14. MODIS与Landsat获取LST数据
  15. SRA数据下载(通过EBI-ENA数据库,使用ASpera)
  16. html跑马灯(附源码效果图)
  17. Kelvin Test
  18. JAXB根据带继承关系的类生成soap请求的XML报文(互转)
  19. Virtual Box安装Linux
  20. qq邮箱 北航邮箱配置 foxmail

热门文章

  1. 《金色梦乡》金句摘抄(十)
  2. 在gitee上创建自己的仓库步骤
  3. JAVASE阶段流程图
  4. ServletActionContext.getRequest().getSession() 和 ActionContext.getContext().getSession()的区别
  5. Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
  6. 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案
  7. (转)使用IDEA将普通MAVEN项目转为WEB项目
  8. 防止用户重复提交表单数据,session方式,js方式
  9. ide 日志 乱码_IDE日志分析方法pt。 2
  10. 光盘 机密_使用保险柜管理机密