【问题标题】:logging input/output xml in apache xmlrpc client在 apache xmlrpc 客户端中记录输入/输出 xml
【发布时间】:2012-03-29 14:22:55
【问题描述】:

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

谢谢

【问题讨论】:

  • 你使用什么日志框架?
  • 没有框架,实际上我只需要一些简单的东西,能够读取传入和传出的xml

标签: java xmlrpcclient


【解决方案1】:

尝试为 org.apache.xmlrpc.client 使用记录器;我敢打赌它会在那个包的某个地方吐出 xml。试试这样的:

<appender name="LOG_FILE" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="Threshold" value="DEBUG"/>
    <param name="File" value="C:\xmlrpc_client.log"/>
    <param name="datePattern" value="'.'yyyy-ww" />
    <param name="Append" value="true"/>
            <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="[%p] %t %d{DATE} %M - %m%n"/>
            </layout>
    </appender>

    <logger name="org.apache.xmlrpc.client">
    <level value="DEBUG"/>
</logger>
    <root>
       <level value="INFO" />
       <appender-ref ref="LOG_FILE"/>
    </root>

【讨论】:

  • 对不起,我不明白。这是什么类型的xml?请原谅新手:D
  • 您好,不用担心,但是当您说“log”时,我以为您已经在使用 log4j。在这种情况下,如果您确实开始使用 log4j,非常容易设置,请为 log4j.xml 使用上述配置,并且该包 org.apache.xmlrpc.client 下的所有类都会记录它们的内容,我敢打赌那里的类之一,可能 XmlRpcClient 会记录它发出的 xml 和它接收的 xml
  • @CarlosJaimeC.DeLeon,我试过了,但显然该记录器上没有任何记录。
【解决方案2】:

我的解决方法是使用自定义传输,如下所示。也许有更优雅的方式来做到这一点。

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 客户端的代码中:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2015-03-01
    相关资源
    最近更新 更多