2012-03-13 16 views
8

Tôi đang xây dựng một khách hàng xmlrpc với Java bằng cách sử dụng Apache xmlrpc, nhưng không thể tìm ra cách đăng nhập vào/ra xml (dữ liệu thô nhận và gửi). Làm thế nào để tôi làm điều này?Đăng nhập/xuất xml trong apache xmlrpc client

Cảm ơn bạn

+0

khung đăng nhập gì làm bạn sử dụng không? –

+0

không có khung, tôi chỉ cần một cái gì đó đơn giản thực sự, để có thể đọc xml đến và đi – ndriks

Trả lời

12

Công việc của tôi là sử dụng phương tiện tùy chỉnh như sau. Có lẽ có nhiều cách duyên dáng hơn để làm điều này.

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

Và sau đó trong các mã mà tạo ra khách hàng XML-RPC của bạn:

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

Hãy thử sử dụng một logger cho org.apache.xmlrpc.client; Tôi đặt cược nó sẽ nhổ ra xml một nơi nào đó trong gói đó. Hãy thử một cái gì đó như thế này:

<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

Tôi xin lỗi, nhưng tôi không hiểu. Đây là loại xml gì? tha thứ cho newbie-ness: D – ndriks

+0

Xin chào, đừng lo, nhưng khi bạn nói 'đăng nhập', tôi nghĩ bạn đã sử dụng log4j. Trong trường hợp này, nếu bạn bắt đầu sử dụng log4j, rất dễ cài đặt, hãy sử dụng cấu hình ở trên cho log4j.xml và tất cả các lớp theo gói org.apache.xmlrpc.client đó sẽ ghi lại nội dung của chúng, tôi đặt cược một trong các lớp ở đó, có lẽ XmlRpcClient sẽ đăng nhập xml nó gửi ra và xml nó nhận được –

+3

@ CarlosJaimeC.DeLeon, tôi đã thử điều này, nhưng dường như không có gì được đăng nhập vào nhật ký đó. –

Các vấn đề liên quan