当我们在使用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 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 2.5 开发简明教程中文版是一份针对初学者和中级开发者的学习资源,由四川农业大学信息与工程技术学院的张勇编写。本教程旨在帮助读者掌握Spring框架的2.5版本,这一版本在Spring的历史中具有重要的地位,因为...
Spring 2.5 开发简明教程 Spring 是一个开源的 Java 平台,它主要为 J2EE 应用程序提供了一个轻量级的框架,简化了企业级应用的开发。Spring 2.5 版本是该框架的一个重要里程碑,引入了许多新特性和改进,使得开发...
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作为一个快速开发框架,自然也提供了对日志...