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

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

jax-ws 生成soap

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

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

相关文章

C语言查找数组最大最小值

点击上方蓝字关注我&#xff0c;了解更多咨询C语言查询最大最小值的实现思路&#xff1a;定一个变量存储最大值或最小值&#xff0c;变量的初始值取自数组的第一个元素&#xff0c;然后遍历数组&#xff0c;如果遍历到的元素比变量的值大&#xff0c;就把值赋给变量&#xff0c…

c语言中%s的含义你知道吗?

点击上方蓝字关注我&#xff0c;了解更多咨询%s在C语言中代表字符串型格式符&#xff0c;一般用在printf、sprintf等字符串格式化函数中&#xff0c;用于决定格式化参数的数据类型。整数类型是%d,单精度浮点类型&#xff0c;也就是小数是%f,字符类型%c%c&#xff0c;%s这些代表…

mysql 1千万 like优化_MYSQL千万级数据量的优化方法积累

1、分库分表很明显&#xff0c;一个主表(也就是很重要的表&#xff0c;例如用户表)无限制的增长势必严重影响性能&#xff0c;分库与分表是一个很不错的解决途径&#xff0c;也就是性能优化途径&#xff0c;现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之…

1.0jpa 2.0_JPA 2.1如何成为新的EJB 2.0

1.0jpa 2.0美丽在于情人眼中。 “轻松”也是如此&#xff1a; 了解有关SQL结果集映射的更多信息&#xff0c;并轻松处理本机查询结果&#xff1a; http : //t.co/WH4BTlClIP #JPA #Java #JavaEE — Thorben Janssen&#xff08; thjanssen123&#xff09; 2015年4月15日 Tho…

C语言while循环要点你会吗

点击上方蓝字关注我&#xff0c;了解更多咨询while语句在使用过程需要注意几个要点&#xff1a;一、无限循环先来看看以下的代码示例int n 0;while(n<3)printf("n %d", n);n;执行代码后&#xff0c;循环输出n0。在上述代码中&#xff0c;虽然有n自增&#xff0c…

mysql performance tuning_MySQL Performance tuning

1.表级锁状态mysql> show status like table%;---------------------------------------| Variable_name | Value |---------------------------------------| Table_locks_immediate | 139306577 || Table_locks_waited | 0 || Tabl…

序列化加密字段_自动加密可序列化的类

序列化加密字段在Coursera安全顶峰项目的验尸讨论中提出了一个疯狂的想法。 类可以在序列化期间自行加密吗&#xff1f; 这主要是学术上的“假设”练习。 很难想到这样一种情况&#xff0c;我们希望在持久性期间依靠对象自加密而不是使用显式加密机制。 我只能确定一种情况&am…

C语言if与else匹配规则你知道多少?

点击上方蓝字关注我&#xff0c;了解更多咨询如果程序中有多个if和else&#xff0c;那如何配对&#xff0c;if和else的匹配规则简单总结为以下两点&#xff1a;1.无花括号&#xff0c;else和最近的if匹配2.有花括号&#xff0c;else和内含有if语句的第1个if语句匹配我们通过两个…

cobertura_Cobertura和Sonar 5.1的问题

cobertura最近&#xff0c;我有些麻烦&#xff0c;试图在我的Grails 2.4.4项目中使用Sonar 5.1。 我使用的是Groovy常用的东西&#xff1a; Gmetrics&#xff0c;Codenarc和Cobertura 。 对于Sonar数据库&#xff0c;我使用的是Postgres 9.4 。 声纳跑步者的日志文件给了我这个…

C语言中+=的含义你明白吗?

点击上方蓝字关注我&#xff0c;了解更多咨询c语言中是代表两个变量相加&#xff0c;并将答案记录在左边的变量里。比如xy实际代表的表达式为&#xff1a;xxy。这是c语言为了语言的简洁性推出的组合运算。常见的运算符都可以这样组合运算。一、源码演示&#xff1a;二、输出结果…

calcite mysql_Apache顶级项目 Calcite使用介绍

原标题&#xff1a;Apache顶级项目 Calcite使用介绍什么是CalciteApache Calcite是一个动态数据管理框架&#xff0c;它具备很多典型数据库管理系统的功能&#xff0c;比如SQL解析、SQL校验、SQL查询优化、SQL生成以及数据连接查询等&#xff0c;但是又省略了一些关键的功能&am…

C语言中「」的含义

点击上方蓝字关注我&#xff0c;了解更多咨询取决于在scanf中使用还是在printf中使用。在scanf中使用&#xff0c;则添加了*的部分会被忽略&#xff0c;不会被参数获取。例如&#xff1a;int a,b;char b[10];scanf("%d%*s",&a,b)&#xff1b;输入为&#xff1a;1…

maven和docker_Java EE,Docker和Maven(技术提示#89)

maven和dockerJava EE应用程序通常使用Maven构建和打包。 例如&#xff0c; github.com/javaee-samples/javaee7-docker-maven是一个琐碎的Java EE 7应用程序&#xff0c;它显示了Java EE 7依赖性&#xff1a; <dependencies><dependency><groupId>javax<…

mysql ondumplictcate_4.5万字手把手教你实现MySQL TB级数据存储!!

写在前面业界对系统的高可用有着基本的要求&#xff0c;简单的说&#xff0c;这些要求可以总结为如下所示。系统架构中不存在单点问题。可以最大限度的保障服务的可用性。一般情况下系统的高可用可以用几个9来评估。所谓的几个9就是系统可以保证对外提供的服务的时间达到总时间…

c语言中+ =和=+有什么区别

点击上方蓝字关注我&#xff0c;了解更多咨询c语言中 和有什么区别&#xff1a;区别在于 是简写&#xff0c;a 1就是a a1&#xff1a;并不是简写&#xff0c;a a直接对a的赋值&#xff0c;符号代表的是正负&#xff08;完全可以省略不写&#xff09;&#xff0c;即a b其实就…

jvm7 jvm8_我们真的仍然需要32位JVM吗?

jvm7 jvm8即使在今天&#xff08;2015年&#xff09;&#xff0c;我们仍然有两个版本或Oracle HotSpot JDK –已调整为32或64位体系结构。 问题是我们是否真的想在服务器甚至笔记本电脑上使用32位JVM&#xff1f; 我们应该有很受欢迎的意见&#xff01; 如果只需要较小的堆&…

C语言中的printf函数,你觉得它简单吗?

点击上方蓝字关注我&#xff0c;了解更多咨询什么是printf函数&#xff1f;printf函数是C语言当中的输出函数&#xff0c;是用来将内容显示在屏幕上的&#xff0c;是C库中的一种函数。printf函数的用法printf函数使用起来很简单&#xff0c;格式&#xff1a;printf&#xff08;…

tp5怎么生成短链接_请问在tp5中怎样才能使用url函数?

MM们thinkphp中的自动完成函数调用有两种不同的方法&#xff0c;分别为callback与function;12345678910namespace Home\Model;use Think\Model;class UserModel extends Model{protected $_auto array (array(status,1), // 新增的时候把status字段设置为1array(password,md5,…

cuba 平台_CUBA平台的理念

cuba 平台最近发生了很多事。 在CUBA于6月1日正式发布之后&#xff0c;我们推出了新版本&#xff0c;在一些Java网站上发布了我们的第一篇文章&#xff0c;并在伦敦的Devoxx UK会议上介绍了该平台 。 但是在热潮继续之前&#xff0c;大约是时候阐明CUBA背后的哲学了。 与企业软…

C语言进阶:探讨函数指针的的定义与使用

点击上方蓝字关注我&#xff0c;了解更多咨询函数指针今天准备和大家讲解一下我们C语言编程的函数指针&#xff0c;为什么函数也需要指针呢&#xff1f;我是这样理解的函数指针方便我们对函数的调用&#xff0c;当我们需要把一个函数作为参数传给其他参数的时候就必须使用函数指…