2012-03-13 11 views
8

मैं अपाचे xmlrpc का उपयोग कर जावा के साथ एक xmlrpc क्लाइंट बना रहा हूं, लेकिन यह पता नहीं लगा सकता कि इनपुट/आउटपुट एक्सएमएल (कच्चे डेटा को प्राप्त और भेजा गया) लॉग कैसे करें। मैं यह कैसे करु?apache xmlrpc क्लाइंट में इनपुट इनपुट/आउटपुट xml

धन्यवाद

+0

क्या लॉगिंग ढांचे उपयोग करते हैं? –

+0

कोई ढांचा नहीं, मुझे वास्तव में आने वाली और आउटगोइंग xml – ndriks

उत्तर

12

मेरा काम-आसपास एक कस्टम परिवहन का उपयोग करना था। शायद ऐसा करने के अधिक सुन्दर तरीके हैं।

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

org.apache.xmlrpc.client के लिए एक लकड़हारा उपयोग करने का प्रयास; मुझे यकीन है कि यह उस पैकेज में कहीं भी एक्सएमएल थूक जाएगा। इस तरह कुछ कोशिश करें:

<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> 
+0

पढ़ने में सक्षम होने के लिए वास्तव में कुछ सरल चाहिए, मुझे खेद है, लेकिन मुझे समझ में नहीं आता है। यह किस प्रकार का एक्सएमएल है? न्यूबी-नेस क्षमा करें: डी – ndriks

+0

हाय, कोई चिंता नहीं, लेकिन जब आपने 'लॉग' कहा, तो मैंने सोचा कि आप पहले ही log4j का उपयोग कर रहे थे। इस मामले में, यदि आप log4j का उपयोग करना शुरू करते हैं, तो सेटअप करने में बहुत आसान है, log4j.xml के लिए उपरोक्त कॉन्फ़िगरेशन का उपयोग करें और उस पैकेज के अंतर्गत सभी वर्ग org.apache.xmlrpc.client उनकी सामग्री लॉग इन करेंगे, मैं वहां कक्षाओं में से एक शर्त लगाता हूं, शायद एक्सएमएलआरपीसी क्लाइंट उस एक्सएमएल को लॉग करेगा जो इसे भेजता है और एक्सएमएल इसे –

+3

@ कार्लोस जैमसी डीडियॉन ​​प्राप्त करता है, मैंने कोशिश की, लेकिन स्पष्ट रूप से उस लॉगर पर कुछ भी लॉग नहीं है। –

संबंधित मुद्दे