Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * This file is part of the DiffX library.
   *
   * For licensing information please see the file license.txt included in the release.
   * A copy of this licence can also be found at
   *   http://www.opensource.org/licenses/artistic-license-2.0.php
   */
  package com.topologi.diffx.xml;
  
 import java.util.Date;
This class provides methods to serialize objects to XML.

There is no mechanism to prevent infinite loops if some objects (lists,...) reference themselves.

The underlying XML document is generated using an XML string buffer.

Author(s):
Christophe Lauret
Version:
7 March 2005
 
 public final class XMLSerializer {
 
   // TODO: make an interface out of this class.
 
   // TODO: make the dateformat a class attribute.
 
  
Date formatter.
 
   private static final DateFormat DF = new SimpleDateFormat("dd/MM/yyyy");

  
Used to store the xml document of this class.

Classes extending this class should use their constructors to set the size of the XMLStringBuffer.

 
   private final XMLWriter xml;

  
Creates a new XML serializer using the specified XML writer.

Parameters:
xml The XML string buffer to be used
 
   public XMLSerializer(XMLWriter xml) {
     this. = xml;
   }

  
Returns the underlying XML document.

Returns:
the xml stringbuffer
 
   public XMLWriter getXML() {
     return this.;
   }

  
Serialises the given object using the given name as element name.

This implementation is recursive. It calls itself for fields which are not of primitive type.

Parameters:
o Object to be serialised as xml
name Name of object
Throws:
java.io.IOException Should an I/O error occur.
 
   public void serialize(Object oString namethrows IOException {
     if (o != null) {
       // get rid of some nasty symbols from qualified names and inner classes
       if (name.lastIndexOf('.') != -1) {
         name = name.substring(name.lastIndexOf('.')+1);
       }
       if (name.lastIndexOf('$') != -1) {
         name = name.substring(name.lastIndexOf('$')+1);
       }
       name = name.toLowerCase();
       // numbers
       if (o instanceof Number) {
         this..openElement(namefalse);
         this..writeText(o.toString());
         this..closeElement();
         // strings
       } else if (o instanceof String) {
         this..openElement(namefalse);
         this..writeText(o.toString());
         this..closeElement();
         // characters
      } else if (o instanceof Character) {
        this..openElement(namefalse);
        this..writeText(((Character)o).charValue());
        this..closeElement();
        // boolean
      } else if (o instanceof Boolean) {
        this..openElement(namefalse);
        this..writeText(o.toString());
        this..closeElement();
        // dates
      } else if (o instanceof Date) {
        this..openElement(namefalse);
        this..writeText(.format((Date)o));
        this..closeElement();
        // collection
      } else if (o instanceof Collection<?>) {
        this..openElement(name, ((Collection<?>)o).size() != 0);
        serializeCollection((Collection<?>)o);
        this..closeElement();
        // hashtable
      } else if (o instanceof Hashtable<?,?>) {
        this..openElement(name, ((Hashtable<?,?>)o).size() != 0);
        serializeHashtable((Hashtable<?,?>)o);
        this..closeElement();
        // other objects
      } else {
        this..openElement(nametrue);
        serializeObject(o);
        this..closeElement();
      }
    }
  }

  
Serialises the given Collection to xml.

Iterates over every object and call the serialize(java.lang.Object,java.lang.String) method.

Parameters:
c The Collection to be serialised to XML
Throws:
java.io.IOException Should an I/O error occur.
  public void serializeCollection(Collection<?> cthrows IOException {
    for (Object o : c) {
      serialize(oo.getClass().getName());
    }
  }

  
Serialise the given Hashtable to xml.

This methods only works if the java.util.Hashtable contains String objects.

Parameters:
h The hashtable to be serialized to XML
Throws:
java.io.IOException Should an I/O error occur.
  public void serializeHashtable(Hashtable<?, ?> hthrows IOException {
    this..openElement("map", !h.isEmpty());
    for (Enumeration<?> e = h.keys(); e.hasMoreElements();) {
      Object key = e.nextElement();
      Object value = h.get(key);
      this..openElement("element");
      this..openElement("key");
      serialize(key"key");
      this..closeElement();
      this..openElement("value");
      serialize(value"value");
      this..closeElement();
      this..closeElement();
    }
    this..closeElement();
  }

  
Serialises the given object to xml by using the public methods getXXX().

This method calls every getXXX() method from the object to get the returned object and then calls the serialize(java.lang.Object,java.lang.String) method with the returned object and the name xxx in lower case.

Parameters:
o The object to be serialised as XML
Throws:
java.io.IOException Should an I/O error occur.
  public void serializeObject(Object othrows IOException {
    if (o instanceof XMLSerializable) {
      try {
        Object[] args = new Object[0]; // required by the invoke method
        Class<?> cls = o.getClass();
        Method[] meth = cls.getMethods();
        for (Method element : meth) {
          String methodName = element.getName();
          if (methodName.startsWith("get") && !"getClass".equals(methodName)) {
            Object retObj = element.invoke(oargs);
            String attribute = methodName.substring(3).toLowerCase();
            serialize(retObjattribute);
          }
        }
      } catch (IllegalAccessException ex) {
        ex.printStackTrace();
      } catch (InvocationTargetException ex) {
        ex.getTargetException().printStackTrace();
      }
    } else if (o instanceof XMLWritable) {
      ((XMLWritable)o).toXML(this.);
    }
  }
New to GrepCode? Check out our FAQ X