在apache xmlrpc客户端中记录输入/输出xml [英] logging input/output xml in apache xmlrpc client

查看:172
本文介绍了在apache xmlrpc客户端中记录输入/输出xml的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Apache xmlrpc使用Java构建xmlrpc客户端,但无法弄清楚如何记录输入/输出xml(接收和发送的原始数据)。我该怎么做?

I'm building an xmlrpc client with Java using Apache xmlrpc, but couldn't figure out how to log the input/output xml (the raw data received and sent). How do I do this?

谢谢

推荐答案

我的工作-around是使用自定义传输,如下所示。也许还有更优雅的方法。

My work-around was to use a custom transport as follows. Perhaps there are more graceful ways of doing this.

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcStreamTransport;
import org.apache.xmlrpc.client.XmlRpcSunHttpTransport;
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.xml.sax.SAXException;


/**
 * This is a custom XML-RPC transport which logs the outgoing and incoming
 * XML-RPC messages.
 */
public class MessageLoggingTransport extends XmlRpcSunHttpTransport
{
    private static final Logger log = Logger.getLogger(MessageLoggingTransport.class.getName());


    /**
     * Default constructor
     * 
     * @see XmlRpcSunHttpTransport#XmlRpcSunHttpTransport(XmlRpcClient)
     * @param pClient
     */
    public CookieHandlingTransport(final XmlRpcClient pClient)
    {
        super(pClient);
    }


    /**
     * Dumps outgoing XML-RPC requests to the log
     */
    @Override
    protected void writeRequest(final XmlRpcStreamTransport.ReqWriter pWriter) throws IOException, XmlRpcException, SAXException
    {
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
        pWriter.write(baos);
        log.info(baos.toString());
        super.writeRequest(pWriter);
    }


    /**
     * Dumps incoming XML-RPC responses to the log
     */
    @Override
    protected Object readResponse(XmlRpcStreamRequestConfig pConfig, InputStream pStream) throws XmlRpcException
    {
        final StringBuffer sb = new StringBuffer();

        try
        {
            final BufferedReader reader = new BufferedReader(new InputStreamReader(pStream));
            String line = reader.readLine();
            while(line != null)
            {
                sb.append(line);
                line = reader.readLine();
            }
        }
        catch(final IOException e)
        {
            log.log(Level.SEVERE, "While reading server response", e);
        }

        log.info(sb.toString());

        final ByteArrayInputStream bais = new ByteArrayInputStream(sb.toString().getBytes());
        return super.readResponse(pConfig, bais);
    }
}

然后在创建XML-RPC的代码中客户:

And then in the code which creates your XML-RPC client:

final XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
config.setServerURL(new URL(url));

final XmlRpcTransportFactory transportFactory = new XmlRpcTransportFactory()
{
    public XmlRpcTransport getTransport()
    {
        return new MessageLoggingTransport(client);
    }
};

client = new XmlRpcClient();
client.setTransportFactory(transportFactory);
client.setConfig(config);

这篇关于在apache xmlrpc客户端中记录输入/输出xml的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆