记录webservice接口日志,输入和输出可以记录再一起

配置文件配置

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://cxf.apache.org/jaxws
    http://cxf.apache.org/schemas/jaxws.xsd">

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

    <context:component-scan base-package="com.test.inf" />

    <jaxws:endpoint id="syncUserService"
        implementor="com.test.inf.testServiceImpl " address="/testInf">
        <jaxws:inInterceptors>
            <bean name="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
            <bean name="webLogInInterceptor" class="com.test.inf.WebLogInInterceptor" />
        </jaxws:inInterceptors>
        <jaxws:outInterceptors>
            <bean name="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
            <bean name="webLogOutInterceptor" class="com.test.inf.WebLogOutInterceptor" />
        </jaxws:outInterceptors>
    </jaxws:endpoint>

</beans>
WebLogInInterceptor 为输入拦截器
WebLogOutInterceptor 为输出拦截器
package com.test.inf;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class WebLogInInterceptor extends AbstractPhaseInterceptor<Message> {

    public MessageInInterceptor() {
        super(Phase.RECEIVE);
    }

    public void handleMessage(Message message) throws Fault {

         try {
             String xml;
             InputStream is = message.getContent(InputStream.class);

             String encoding = (String)message.get(Message.ENCODING);
             xml = IOUtils.toString(is);

             System.out.println("输入报文为:" + xml);
             message.setContent(InputStream.class, new ByteArrayInputStream(xml.getBytes(encoding)));
             message.getExchange().put("idtest", xml);
         } catch (Exception e) {
             e.printStackTrace();
         }
    }
}

message.setExchage().put("idtest", xml); 将输入信息存储

package com.test.inf;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class MessageOutInterceptor extends AbstractPhaseInterceptor<Message> {
    @SuppressWarnings("unused")
    private String mMessage;

    public MessageOutInterceptor() {
        super(Phase.PRE_STREAM);
    }

   public void handleMessage(Message message) throws Fault {
       String xml;
         try {

             String inputXML = (String) message.getExchange().get("idtest");
             System.out.println("输入信息::::"+inputXML);
             OutputStream os = message.getContent(OutputStream.class);
             CachedStream cs = new CachedStream();
             message.setContent(OutputStream.class, cs);
             message.getInterceptorChain().doIntercept(message);
             CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);
             InputStream in = csnew.getInputStream();
             xml = IOUtils.toString(in);
             System.out.println("输出信息:" + xml);
             IOUtils.copy(new ByteArrayInputStream(xml.getBytes()), os);
             cs.close();
             os.flush();
             message.setContent(OutputStream.class, os); 

         } catch (Exception e) {
             e.printStackTrace();
         }
    }

}

String inputXML = (String) message.getExchange().get("idtest");  获取输入信息

时间: 2025-01-16 07:21:08

记录webservice接口日志,输入和输出可以记录再一起的相关文章

从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数

这一章节我们再上一个章节的基础上加上一个检查订单功能 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_4; public class Cake { private String name = ""; public String getName() { return name; } public void setName(String name) { this.name = name; }

从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数

这一章节我们讨论一下扩展添加检查订单功能,以便记录并检測输入的參数. 1.domain 蛋糕类: package com.raylee.my_new_spring.my_new_spring.ch03.topic_1_8; public class Cake { private String name = ""; public String getName() { return name; } public void setName(String name) { this.name =

用Python写WebService接口并且调用

一.用ladon框架封装Python为Webservice接口 另用soaplib实现请看:    http://www.jianshu.com/p/ad3c27d2a946 功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json等格式的接口.本篇紧接着上上篇(Django部署)的.虽然很简单,但是官网的文档还是不够详细,下面介绍我配置的过程及遇到的问题. 1.安装Ladon包 使用Ladon框架,首先需要安装La

如何利用log4Net自定义属性配置功能记录完整的日志信息

log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生.下面我将详细介绍如何利用其自定义属性,让日志信息更完整. 一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nuget进行安装. 二,创建日志模型及数据库表,因为我们的日志信息可以输出为文本,也可以输出到数据库. 三,添加MyLayout,MyPatternConverter类扩展PatternLayout. 四,添加Log4Net.config文件,进行输入方式定义. <?xml version="1.

互联网 免费的WebService接口

winform开发暂告于段落,最近再用webservice写接口,接下来的一段时间应该偏向于此方向. (转)一批的免费webservice接口,没有技术含量,只是写在这里做个记忆 股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询)Endpoint: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx 复制 EndpointDisco: http://webservice.webxml.com

[转载]互联网 免费的WebService接口

股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx 复制 Endpoint Disco: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx?disco 复制 Disco WSDL: http://webservice.webxml.com.cn/We

常用webservice接口

商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx Disco: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx?disco WSDL: http://webservice.webxml.com.cn/WebServices/St

我的第一次Webservice接口开发

转: 我的第一次Webservice接口开发 我的第一次Webservice接口开发原创 jianhaojiang 最后发布于2019-05-09 16:58:09 阅读数 9830 收藏展开前言 最近项目上需要对接WebService接口,之前从来没有用过,这次都遇见了.记录下基础的使用和我遇见的问题.正文概述 WebService接口百度一搜,各个介绍的都非常详细,由于刚开始没接触,看的也不是很懂.首先记住一句话:WebService是一种跨编程语言和跨操作系统平台的远程调用技术.跨编程语言

通过Java WebService接口从服务端下载文件

一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的复杂度和系统对外暴露的接口.通过在服务端读取文件,返回字节流到客户端的方式比较简单. 下面采用restful的接口形式,满足SOA架构接口要求.如下代码拷贝到eclipse中即可运行,功能自测试运行正常.样例代码的服务端和客户端在同一台PC上运行,放到不同PC上运行改一下发布服务和请求服务的IP地址