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

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

  1. 在Spring中记录JAX-WS SOAP消息

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

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

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

  3. Spring中RedisTemplate方法中,redis相关操作笔记。[redis生成指定长度自增批次号,删除、设置过期时间等]

    Spring中RedisTemplate方法中,redis相关操作笔记. redis获取自增批次号 // opsForValue()生成long UUID = redisTemplate.opsFor ...

  4. Spring中配置DataSource数据源的几种选择

    Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...

  5. 9种设计模式在Spring中的运用,一定要非常熟练!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:iCoding91 https://blog.csdn.ne ...

  6. 一文读懂Spring中的AOP机制

    一.前言 这一篇我们来说一下 Spring 中的 AOP 机制,为啥说完注解的原理然后又要说 AOP 机制呢? 1.标记日志打印的自定义注解 @Target({ElementType.METHOD}) ...

  7. spring中这些能升华代码的技巧,可能会让你爱不释手

    前言 最近越来越多的读者认可我的文章,还是件挺让人高兴的事情.有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场.正好我对spring源码有过一定的研究,并结合我这几年 ...

  8. Spring 中JCA CCI分析--转载

    转载地址:http://blog.csdn.net/a154832918/article/details/6790612 J2EE提供JCA(Java Connector Architecture)规 ...

  9. Spring 中经典的 9 种设计模式,打死也要记住啊!

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客:点 ...

最新文章

  1. 第十六章:数据绑定(七)
  2. OBS显示器捕获黑屏的解决方法
  3. vb循环 Do While…Loop 语句/Do Until…Loop语句
  4. TypeScript中的class声明了什么
  5. linux syslog服务器配置,自动发日志到另一台日志服务器
  6. Linux环境使用命名空间编写一个简单的容器应用程序:namespace,container,cgroups
  7. JDK8新特性(六)之Stream流的forEach()方法
  8. 探索ASP.NET MVC5系列之~~~1.基础篇---必须知道的小技能
  9. 【电子技术实验理论】语音放大电路
  10. python excel表格转word表格
  11. dm9000数据速率_STM32F103战舰DM9000的LWIP例程TCP速度慢,发送间隔太长
  12. 一款ModbusRTU/TCP485串口协议调试软件工具绿色版免安装
  13. python百度经纬度转google经纬度
  14. 把脉城市交通 共商缓堵良策
  15. Win10 - 使用‘Alt+Tab’不能切换窗口及更改切换风格
  16. js 打印去掉页眉页脚页码_js页面打印去除页眉页脚
  17. HackTheBox::Blunder
  18. 无人驾驶汽车系统入门(十六)——最短路径搜索之A*算法
  19. 暴力解决Centos6YUM下Loaded plugins: fastestmirror Determining fastest mirror和Could not retrieve mirro
  20. 用皮尔逊相关系数检查特征间的线性相关关系

热门文章

  1. CF1114F-Please, another Queries on Array?【线段树,欧拉函数】
  2. P2514-[HAOI2010]工厂选址【贪心】
  3. jzoj3055-比赛【数学,统计】
  4. codeforces1452 E. Two Editorials
  5. 【结论】游戏(jzoj 1984)
  6. Mysql中的行级锁、表级锁、页级锁
  7. 使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
  8. String与StringBuffer、StringBuilder之间的转换
  9. php匿名类的应用场景,【modernPHP专题(9)】匿名类
  10. 继承类对方法的影响java_4-Java面向对象-继承(上)