sdeboy      2003/06/11 22:19:26

  Modified:    src/java/org/apache/log4j/xml XMLDecoder.java
  Log:
  Updated xmldecoder to correctly handle partial events when decodeevents(string) 
method is called (used by xmlsocketnode).
  
  Revision  Changes    Path
  1.12      +45 -26    
jakarta-log4j-sandbox/src/java/org/apache/log4j/xml/XMLDecoder.java
  
  Index: XMLDecoder.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-log4j-sandbox/src/java/org/apache/log4j/xml/XMLDecoder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XMLDecoder.java   22 May 2003 08:43:42 -0000      1.11
  +++ XMLDecoder.java   12 Jun 2003 05:19:25 -0000      1.12
  @@ -49,25 +49,11 @@
   
   package org.apache.log4j.xml;
   
  -import org.apache.log4j.Decoder;
  -import org.apache.log4j.Level;
  -import org.apache.log4j.Logger;
  -import org.apache.log4j.UtilLoggingLevel;
  -import org.apache.log4j.spi.LocationInfo;
  -import org.apache.log4j.spi.LoggingEvent;
  -
  -import org.w3c.dom.Document;
  -import org.w3c.dom.Node;
  -import org.w3c.dom.NodeList;
  -
  -import org.xml.sax.InputSource;
  -
   import java.io.File;
   import java.io.FileReader;
   import java.io.IOException;
   import java.io.LineNumberReader;
   import java.io.StringReader;
  -
   import java.util.Collections;
   import java.util.Hashtable;
   import java.util.Map;
  @@ -77,6 +63,17 @@
   import javax.xml.parsers.DocumentBuilderFactory;
   import javax.xml.parsers.ParserConfigurationException;
   
  +import org.apache.log4j.Decoder;
  +import org.apache.log4j.Level;
  +import org.apache.log4j.Logger;
  +import org.apache.log4j.UtilLoggingLevel;
  +import org.apache.log4j.spi.LocationInfo;
  +import org.apache.log4j.spi.LoggingEvent;
  +import org.w3c.dom.Document;
  +import org.w3c.dom.Node;
  +import org.w3c.dom.NodeList;
  +import org.xml.sax.InputSource;
  +
   
   /**
    * Decodes Logging Events in XML formated into elements that are used by
  @@ -90,14 +87,16 @@
    *
    */
   public class XMLDecoder implements Decoder {
  -  private static final String beginPart =
  +  private static final String BEGINPART =
       "<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE log4j:eventSet SYSTEM 
\"log4j.dtd\"><log4j:eventSet version=\"1.2\" 
xmlns:log4j=\"http://jakarta.apache.org/log4j/\";>";
  -  private static final String endPart = "</log4j:eventSet>";
  +  private static final String ENDPART = "</log4j:eventSet>";
  +  private static final String RECORD_END = "</log4j:event>";
     private StringBuffer buf = new StringBuffer();
     private DocumentBuilderFactory dbf;
     private DocumentBuilder docBuilder;
     private Map additionalProperties = Collections.EMPTY_MAP;
  -
  +  private String partialEvent;
  +  
     public XMLDecoder() {
       dbf = DocumentBuilderFactory.newInstance();
       dbf.setValidating(false);
  @@ -148,9 +147,9 @@
          */
         buf = new StringBuffer(1024);
   
  -      buf.append(beginPart);
  +      buf.append(BEGINPART);
         buf.append(data);
  -      buf.append(endPart);
  +      buf.append(ENDPART);
   
         InputSource inputSource =
           new InputSource(new StringReader(buf.toString()));
  @@ -208,19 +207,39 @@
       if (doc == null) {
         return null;
       }
  -    return decodeEvents(doc);
  +    return decodeEvents(fileContents);
     }
   
     public Vector decodeEvents(String document) {
  -     if (document != null) {
  -         Document doc = parse(document);
  +    if (document != null) {
  +      document = document.trim();
  +
  +      if (document.equals("")) {
  +        return null;
  +      } else {
  +             String newDoc=null;
  +             String newPartialEvent=null;
  +             //separate the string into the last portion ending with </log4j:event> 
(which will
  +             //be processed) and the partial event which will be combined and 
processed in the next section
  +             if (document.lastIndexOf(RECORD_END) + RECORD_END.length() < 
document.length()) {
  +             newDoc = document.substring(0, document.lastIndexOf(RECORD_END) + 
RECORD_END.length());
  +                     newPartialEvent = 
document.substring(document.lastIndexOf(RECORD_END) + RECORD_END.length());
  +             } else {
  +                     newDoc = document;
  +             }
  +             if (partialEvent != null) {
  +                     newDoc=partialEvent + newDoc;
  +             }                       
  +             partialEvent=newPartialEvent;
  +             
  +        Document doc = parse(newDoc);
           if (doc == null) {
             return null;
           }
  -
  -         return decodeEvents(doc);
  -     }
  -     return null;
  +        return decodeEvents(doc);
  +      }
  +    }
  +    return null;
     }
   
     /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to