我使用Apache xmlrpc構建了一個Java的xmlrpc客戶端,但無法弄清楚如何記錄輸入/輸出xml(接收和發送的原始數據)。我該怎麼做呢?在Apache xmlrpc客戶端記錄輸入/輸出xml
謝謝
我使用Apache xmlrpc構建了一個Java的xmlrpc客戶端,但無法弄清楚如何記錄輸入/輸出xml(接收和發送的原始數據)。我該怎麼做呢?在Apache xmlrpc客戶端記錄輸入/輸出xml
謝謝
我的工作,各地情況如下使用自定義的運輸。也許有更多優雅的方式來做到這一點。
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);
嘗試使用記錄儀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 – ndriks 2012-03-13 13:46:42
嗨,不用擔心,但是當你說'登錄'時,我以爲你已經在使用log4j了。在這種情況下,如果你開始使用log4j,設置起來非常簡單,可以使用上面的log4j.xml配置,並且包org.apache.xmlrpc.client下的所有類都會記錄他們的東西,我敢打賭其中的一個類,大概XmlRpcClient會記錄它發送的xml和它接收到的xml – 2012-03-14 01:46:43
@ CarlosJaimeC.DeLeon,我試過了,但顯然沒有記錄到該記錄器上。 – 2012-04-08 21:34:55
什麼日誌框架,你用? – 2012-03-13 08:53:09
沒有框架,實際上我只需要一些簡單的東西,能夠讀取傳入和傳出的xml – ndriks 2012-03-13 13:44:31