Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
    * JBoss, Home of Professional Open Source
    * Copyright 2005, JBoss Inc., and individual contributors as indicated
    * by the @authors tag. See the copyright.txt in the distribution for a
    * full listing of individual contributors.
    *
    * This is free software; you can redistribute it and/or modify it
    * under the terms of the GNU Lesser General Public License as
    * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
 package org.jboss.xb.binding;
 
 import  org.jboss.logging.Logger;
 
 import java.util.List;
 import java.util.Map;
Sandbox. Very testcase specific impl.

Author(s):
Alexey Loubyansky
Version:
$Revision: 1958 $
 
 public class SchemalessMarshaller
 {
    private static final Logger log = Logger.getLogger(SchemalessMarshaller.class);
 
    public static final String PROPERTY_JAXB_SCHEMA_LOCATION = "jaxb.schemaLocation";
 
    private final Properties props = new Properties();
 
    private final Map gettersPerClass = new HashMap();
 
    private final Content content = new Content();
 
    public void setProperty(String nameString value)
    {
       .setProperty(namevalue);
    }
 
    public void marshal(Object rootStringWriter writer)
    {
       .debug("marshal: root=" + root);
 
       .startDocument();
 
       marshalObject(rootroot.getClass().getName(), writer);
 
       .endDocument();
 
       writer.write("<?xml version=\"");
       writer.write("1.0");
       writer.write("\" encoding=\"");
       writer.write("UTF-8");
       writer.write("\"?>\n");
 
       ContentWriter contentWriter = new ContentWriter(writertrue);
       try
       {
          .handleContent(contentWriter);
       }
       catch(SAXException e)
       {
          .error("Failed to write content."e);
          throw new IllegalStateException("Failed to write content: " + e.getMessage());
       }
    }
 
    private void marshalObject(Object rootString localNameStringWriter writer)
    {
       List getters = getGetterList(root.getClass());
       AttributesImpl attrs = null//new AttributesImpl(5);
       .startElement(nulllocalNamelocalNameattrs);
 
       for(int i = 0; i < getters.size(); ++i)
       {
          Method getter = (Method)getters.get(i);
          Object child;
          try
         {
            child = getter.invoke(rootnull);
         }
         catch(Exception e)
         {
            .error("Failed to invoke getter " + getter.getName() + " on " + roote);
            throw new IllegalStateException(
               "Failed to invoke getter " + getter.getName() + " on " + root + ": " + e.getMessage()
            );
         }
         if(child != null)
         {
            String childName = getter.getName().substring(3);
            if(isAttributeType(child.getClass()))
            {
               marshalAttributeType(childNamechild);
               /*
               attrs.add(null,
                  getter.getName().substring(3),
                  getter.getName().substring(3),
                  getter.getClass().getName(),
                  child.toString()
               );
               */
            }
            else if(child.getClass().isArray())
            {
               .startElement(nullchildNamechildNamenull);
               for(int arrInd = 0; arrInd < Array.getLength(child); ++arrInd)
               {
                  Object o = Array.get(childarrInd);
                  marshalCollectionItem(oo.getClass().getName(), o.getClass().getName(), writer);
               }
               .endElement(nullchildNamechildName);
            }
            else if(Collection.class.isAssignableFrom(child.getClass()))
            {
               .startElement(nullchildNamechildNamenull);
               Collection col = (Collection)child;
               for(Iterator iter = col.iterator(); iter.hasNext();)
               {
                  Object o = iter.next();
                  marshalCollectionItem(oo.getClass().getName(), o.getClass().getName(), writer);
               }
               .endElement(nullchildNamechildName);
            }
            else
            {
               marshalObject(childchildNamewriter);
            }
         }
      }
      .endElement(nulllocalNamelocalName);
   }
   private void marshalCollectionItem(Object oString childNameString qNameStringWriter writer)
   {
      if(o != null)
      {
         if(isAttributeType(o.getClass()))
         {
            marshalAttributeType(childNameo);
         }
         else
         {
            marshalObject(oqNamewriter);
         }
      }
   }
   private void marshalAttributeType(String qNameObject child)
   {
      .startElement(nullqNameqNamenull);
      String value = child.toString();
      .characters(value.toCharArray(), 0, value.length());
      .endElement(nullqNameqName);
   }
   private List getGetterList(Class aClass)
   {
      List getters = (List).get(aClass);
      if(getters == null)
      {
         getters = new ArrayList();
         Method[] methods = aClass.getMethods();
         for(int i = 0; i < methods.length; ++i)
         {
            Method method = methods[i];
            if(method.getDeclaringClass() != Object.class)
            {
               if((method.getName().startsWith("get") || method.getName().startsWith("is")) &&
                  (method.getParameterTypes() == null || method.getParameterTypes().length == 0))
               {
                  getters.add(method);
               }
            }
         }
         .put(aClassgetters);
      }
      return getters;
   }
   static boolean isAttributeType(Class cls)
   {
      if(cls.isPrimitive() ||
         cls == Byte.class ||
         cls == Short.class ||
         cls == Integer.class ||
         cls == Long.class ||
         cls == Float.class ||
         cls == Double.class ||
         cls == Character.class ||
         cls == Boolean.class ||
         cls == String.class ||
         cls == java.util.Date.class)
      {
         return true;
      }
      else
      {
         return false;
      }
   }
New to GrepCode? Check out our FAQ X