当我们在使用Spring Web Services进行开发调试阶段,一定会需要去跟踪请求和接收时的数据,以供我们确认web service接口是否正确,那么输出一些log是非常理所当然的手段。在sws的实现中已经对这些必要的log输出做了准备,而我们要做的就是将log4j配置上去。
首先,以任何形式在项目中加入log4j的jar包,使用maven的话如下,或者自行添加都可以
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
然后,添加
log4j.properties文件,放入你的classpath目录下
引用
log4j.rootCategory=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n
说明:将log4j.rootCategory设置为DEBUG等级后,项目运行时就会输出大量debug信息,于是我run了一次tomcat试试,等待了一小会,发现没有输出任何debug信息,疑惑,然后在client端发送了一次请求,这时候才开始输出大量的log信息,原来sws的初始化行为会在第一次访问时进行,而不会在server启动时直接初始化。
然后,我不需要查看那么多的debug信息,所以将log4j.rootCategory设置为Info,stdout,将debug信息关闭。
接着,为了查看发送和接收请求的log,需要添加一行配置在rootCategory下方,如下
引用
log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG
说明:添加了MessageTracing的log监控,这样发送和接收请求时都会输出相关log。
选择前文的某个test case,运行后,如下log:
引用
DEBUG [server.MessageTracing.received] Received request [SaajSoapMessage {http://mycompany.com/hr/schemas}user]
DEBUG [server.MessageTracing.sent] Sent response [SaajSoapMessage {http://mycompany.com/hr/schemas}user] for request [SaajSoapMessage {http://mycompany.com/hr/schemas}user]
第一次看到结果时,让我很失望,信息量太少,几乎没有太大价值,于是默默的将这行配置注释了。
所以,只能继续阅读官方文档,最后终于被我看到了能够优雅的收集输入输出数据的手段,而这手段就来自于Interceptor拦截器的使用。
注意:拦截器需要依赖commons-log的jar包,若是用maven配置了spring-ws-core,应该会自动导入commons-log,无需手动再添加到pom.xml。如果按照普通方式构建的项目,则需自行添加。
拦截器的含义应该都能明白,就是可以在某个业务逻辑之前或者之后提供额外的行为,比如记录接收的数据和返回的数据。而且就这个需求,spring已经给我们做好了现成的拦截器,不需要自己写了,只需要配置就可以。
在/WEB-INF/spring-ws-servlet.xml中,添加一段配置:
<sws:interceptors>
<bean class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor"/>
</sws:interceptors>
说明:这是spring提供的对Payload方式(即我们前文使用的web service方式)的拦截器,还有另一个SoapEnvelopeLoggingInterceptor这里就不举例了。
同时,拦截器中是通过log debug形式输出,所以在前文log4j.properties中要加入对这个Interceptor的监控。
引用
log4j.logger.org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor=DEBUG
再次运行test case,server端的console输出如下:
引用
DEBUG [endpoint.interceptor.PayloadLoggingInterceptor] Request: <ns2:user xmlns:ns2="http://mycompany.com/hr/schemas"><ns2:id>1</ns2:id><ns2:name>chenzhouce</ns2:name></ns2:user>
DEBUG [endpoint.interceptor.PayloadLoggingInterceptor] Response: <ns2:user xmlns:ns2="http://mycompany.com/hr/schemas"><ns2:id>2</ns2:id><ns2:name>Hello Spring!</ns2:name></ns2:user>
说明: request就是server端接收的数据,response是endpoint处理过后返回给client端的数据。完整的数据显示,除了没有换行看起来会累点。
相关代码依然在github上,branch为 Section_Request_Trace
https://github.com/chenzhouce/spring-webservice-demo/blob/Section_Request_Trace/src/main/webapp/WEB-INF/spring-ws-servlet.xml
分享到:
相关推荐
Spring Web Service是Spring社区基于Spring提供的一个关注于创建”文档驱动”的Web Service的模块, 它的主要目标是方便基于”契约优先”(Contract-First)的SOAP服务的开发. 好像没有多少人讨论, 大多数的话题都是...
《Spring2.5开发简明教程中文版》是针对初学者设计的一份全面而实用的教程,涵盖了Spring框架的核心概念和基本用法。本教程共分为1-4章,每章均配有书签,便于读者查阅和复习。下面将详细阐述这四章中的主要知识点。...
在这个简明教程中,我们将深入探讨Spring的主要组成部分,包括IOC(Inversion of Control,控制反转)、AOP(面向切面编程)、MVC(Model-View-Controller,模型-视图-控制器)和JDBC(Java Database Connectivity,...
《Spring Web Service实战篇(1)》主要涵盖了在Java环境中使用Spring框架构建Web服务的相关技术。本实战篇将深入探讨Spring Web Service的核心概念、架构设计以及实现步骤,旨在帮助开发者熟练掌握这一强大的工具。 ...
《Java Web开发实践教程——从设计到实现(第2版)》是一本深入探讨Java Web技术的权威指南,尤其适合初学者和有一定基础的开发者。本教程通过PPT的形式,以直观、易懂的方式讲解了从项目规划到实际开发的全过程。在...
Spring Web Service 简单使用,配合JAX-B生成的Pojo,直接部署即可运行。
org.springframework.web.context.request.Log4jNestedDiagnosticContextInterceptor.class org.springframework.web.context.request.RequestAttributes.class org.springframework.web.context.request....
Spring Web Services 官网 Spring Web Services API。 Spring Web Services 开发文档。
《Spring Web Flow权威指南》介绍了Spring Web Flow的构建系统Spring Jumpstart、Spring Web Flow架构和基础知识,并结合示例讲述了Spring Web Flow的高级概念、流执行管理和驱动,同时说明了如何测试流。...
这篇博客可能讨论的是如何将这三个技术——XFire、iBatis和Spring——集成在一起,构建一个Web服务应用程序。在这样的集成中,Spring可以管理整个应用的生命周期,包括XFire的Web服务和iBatis的数据访问层。通过...
这篇博客“Web Service实践之——开始XFire”可能详细介绍了如何使用XFire来实现Web服务。 在Web服务的世界里,SOAP(Simple Object Access Protocol)是用于交换结构化信息的标准协议,而WSDL(Web Services ...
与 Spring Web MVC 并行地,Spring Framework 5.0 引入了响应式栈——一个名为 Spring WebFlux 的 Web 框架,该框架的命名也是基于其源模块 `spring-webflux`。本节将重点讨论 Spring Web MVC。 #### 二、...
《Spring Webscripts 参考文档》是Spring框架的一个重要组成部分,主要关注Web应用程序的开发。Spring Webscripts提供了一种灵活、结构化的途径来创建和管理Web服务,特别是那些与用户界面交互的动态Web内容。这篇...
【标题】:“实战Web Service —— 使用Apache CXF开发Web服务的教程” 【内容详解】: Web服务是一种基于开放标准的、平台无关的接口技术,它允许不同系统间的应用程序进行交互。Apache CXF是一个开源的Java框架,...
【Web Service实例详解——Spring+Hibernate+Web Service】 在当今的软件开发中,Web Service作为一项重要的技术,被广泛应用于不同系统之间的数据交互和集成。本实例将详细讲解如何使用Spring、Hibernate和Web ...
精通Spring4.0 企业应用开发实战——ISBN 978-7-121-30443-9 完整高清带目录。
《深入理解Spring Boot Starter Log4j2》 在Java开发领域,日志系统扮演着至关重要的角色,它帮助开发者记录程序运行过程中的信息,便于排查问题和优化代码。Spring Boot作为一个快速开发框架,自然也提供了对日志...