org.exolab.castor.xml
Class Introspector

java.lang.Object
  extended by org.exolab.castor.xml.Introspector

public final class Introspector
extends java.lang.Object

A Helper class for the Marshaller and Unmarshaller, basically the common code base between the two. This class handles the introspection to dynamically create descriptors.

Version:
$Revision: 1.18 $ $Date: 2005/05/22 14:22:58 $
Author:
Keith Visco

Nested Class Summary
(package private)  class Introspector.IdentityConvertor
          A special TypeConvertor that simply returns the object given.
(package private)  class Introspector.MethodSet
          A simple struct for holding a set of accessor methods
 
Field Summary
static java.lang.String WRAP_COLLECTIONS_PROPERTY
          The property name for enabling collection wrapping.
 
Constructor Summary
Introspector()
          Creates a new instance of the Introspector
 
Method Summary
 void addFieldHandlerFactory(FieldHandlerFactory factory)
          Registers the given "generalized" FieldHandlerFactory with this Introspector.
 XMLClassDescriptor generateClassDescriptor(java.lang.Class c)
          Creates an XMLClassDescriptor for the given class by using Reflection.
 XMLClassDescriptor generateClassDescriptor(java.lang.Class c, java.io.PrintWriter errorWriter)
          Creates an XMLClassDescriptor for the given class by using Reflection.
 NodeType getPrimitiveNodeType()
          Returns the NodeType for java primitives
static boolean introspected(XMLClassDescriptor descriptor)
          Returns true if the given XMLClassDescriptor was created via introspection
static boolean isCollection(java.lang.Class clazz)
          Returns true if the given Class is an instance of a collection class.
static boolean isMapCollection(java.lang.Class clazz)
          Returns true if the given Class is an instance of a collection class.
static boolean marshallable(java.lang.Class type)
          Returns true if the given Class can be marshalled.
 boolean removeFieldHandlerFactory(FieldHandlerFactory factory)
          Removes the given FieldHandlerFactory from this Introspector
 void setNaming(XMLNaming naming)
          Sets the Naming conventions to be used by the Introspector
 void setPrimitiveNodeType(NodeType nodeType)
          Sets the NodeType for primitives.
 void setSaveMapKeys(boolean saveMapKeys)
          Sets whether or not keys from Hastable / Map instances should be saved in the XML.
 void setWrapCollections(boolean wrapCollections)
          Sets whether or not collections (arrays, vectors, etc) should be wrapped in a container element.
static java.lang.String toJavaName(java.lang.String name, boolean upperFirst)
          Converts the given xml name to a Java name.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WRAP_COLLECTIONS_PROPERTY

public static final java.lang.String WRAP_COLLECTIONS_PROPERTY
The property name for enabling collection wrapping. The property controls whether or not collections (arrays, vectors, etc) should be wrapped in a container element. For example:
    <foos>
       <foo>foo1</foo>
       <foo>foo2</foo>
    </foos>
 
   instead of the default:

    <foos>foo1<foos>
    <foos>foo2</foos>

 
Use this property with a value of true or false in the castor.properties file org.exolab.castor.xml.introspector.wrapCollections=true -or- org.exolab.castor.xml.introspector.wrapCollections=false This property is false by default.

See Also:
Constant Field Values
Constructor Detail

Introspector

public Introspector()
Creates a new instance of the Introspector

Method Detail

addFieldHandlerFactory

public void addFieldHandlerFactory(FieldHandlerFactory factory)
Registers the given "generalized" FieldHandlerFactory with this Introspector.

Parameters:
factory - the FieldHandlerFactory to add to this introspector
Throws:
java.lang.IllegalArgumentException - if the given factory is null

getPrimitiveNodeType

public NodeType getPrimitiveNodeType()
Returns the NodeType for java primitives

Returns:
the NodeType for java primitives

generateClassDescriptor

public XMLClassDescriptor generateClassDescriptor(java.lang.Class c)
                                           throws MarshalException
Creates an XMLClassDescriptor for the given class by using Reflection.

Parameters:
c - the Class to create the XMLClassDescriptor for
Returns:
the new XMLClassDescriptor created for the given class
Throws:
MarshalException - when an error occurs during the creation of the ClassDescriptor.

generateClassDescriptor

public XMLClassDescriptor generateClassDescriptor(java.lang.Class c,
                                                  java.io.PrintWriter errorWriter)
                                           throws MarshalException
Creates an XMLClassDescriptor for the given class by using Reflection.

Parameters:
c - the Class to create the XMLClassDescriptor for
errorWriter - a PrintWriter to print error information to
Returns:
the new XMLClassDescriptor created for the given class
Throws:
MarshalException - when an error occurs during the creation of the ClassDescriptor.

removeFieldHandlerFactory

public boolean removeFieldHandlerFactory(FieldHandlerFactory factory)
Removes the given FieldHandlerFactory from this Introspector

Parameters:
factory - the FieldHandlerFactory to remove
Returns:
true if the given FieldHandlerFactory was removed, or false otherwise.
Throws:
java.lang.IllegalArgumentException - if the given factory is null

setWrapCollections

public void setWrapCollections(boolean wrapCollections)
Sets whether or not collections (arrays, vectors, etc) should be wrapped in a container element. For example:

    <foos>
       <foo>foo1</foo>
       <foo>foo2</foo>
    </foos>
 
   instead of the default:

    <foos>foo1<foos>
    <foos>foo2</foos>

 

Parameters:
wrapCollections - a boolean that when true indicates collections should be wrapped in a container element.

introspected

public static boolean introspected(XMLClassDescriptor descriptor)
Returns true if the given XMLClassDescriptor was created via introspection


marshallable

public static boolean marshallable(java.lang.Class type)
Returns true if the given Class can be marshalled.

Parameters:
type - the Class to check marshallability for.
Returns:
true if the given Class can be marshalled.

setNaming

public void setNaming(XMLNaming naming)
Sets the Naming conventions to be used by the Introspector

Parameters:
naming - the implementation of Naming to use. A value of null, will reset the XMLNaming to the default specified in the castor.properties file.

setPrimitiveNodeType

public void setPrimitiveNodeType(NodeType nodeType)
Sets the NodeType for primitives. If the NodeType is NodeType.Element, all primitives will be treated as Elements, otherwise all primitives will be treated as Attributes.

Parameters:
nodeType - the NodeType to use for primitive values.

setSaveMapKeys

public void setSaveMapKeys(boolean saveMapKeys)
Sets whether or not keys from Hastable / Map instances should be saved in the XML.

Note: This is true by default since Castor 0.9.5.3

Parameters:
saveMapKeys - a boolean that when true indicates keys from Hashtable or Map instances should be saved. Otherwise only the value object is saved.

toJavaName

public static java.lang.String toJavaName(java.lang.String name,
                                          boolean upperFirst)
Converts the given xml name to a Java name.

Parameters:
name - the name to convert to a Java Name
upperFirst - a flag to indicate whether or not the the first character should be converted to uppercase.

isCollection

public static boolean isCollection(java.lang.Class clazz)
Returns true if the given Class is an instance of a collection class.

See Also:
loadCollections

isMapCollection

public static boolean isMapCollection(java.lang.Class clazz)
Returns true if the given Class is an instance of a collection class.

See Also:
loadCollections


Intalio Inc. (C) 1999-2004. All rights reserved http://www.intalio.com