Class XMLChoiceObjectMapping

java.lang.Object
org.eclipse.persistence.core.mappings.CoreMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField>
org.eclipse.persistence.mappings.DatabaseMapping
org.eclipse.persistence.oxm.mappings.XMLChoiceObjectMapping
All Implemented Interfaces:
Serializable, Cloneable, org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>, org.eclipse.persistence.internal.oxm.mappings.Mapping<org.eclipse.persistence.internal.sessions.AbstractSession,AttributeAccessor,org.eclipse.persistence.internal.queries.ContainerPolicy,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLRecord>, org.eclipse.persistence.internal.oxm.mappings.XMLConverterMapping<XMLMarshaller,Session,XMLUnmarshaller>, XMLMapping

public class XMLChoiceObjectMapping extends DatabaseMapping implements org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>, XMLMapping
PUBLIC:

Purpose:Provide a mapping that can map a single attribute to a number of different elements in an XML Document. This will be used to map to Choices or Substitution Groups in an XML Schema

Responsibilities:

  • Allow the user to specify XPath -> Type mappings
  • Handle reading and writing of XML Documents containing a single choice or substitution group element

The XMLChoiceMapping allows the user to specify a number of different xpaths, and types associated with those xpaths. When any of these elements are encountered in the XML Document, they are read in as the correct type and set in the object.

Setting up XPath mappings:Unlike other OXM Mappings, instead of setting a single xpath, the addChoiceElement method is used to specify an xpath and the type associated with this xpath.
xmlChoiceCollectionMapping.addChoiceElement("mystring/text()", String.class);
xmlChoiceCollectionMapping.addChoiceElement("myaddress", Address.class);

See Also:
  • Constructor Details

    • XMLChoiceObjectMapping

      public XMLChoiceObjectMapping()
  • Method Details

    • getConverter

      public Converter getConverter()
      Return the converter on the mapping. A converter can be used to convert between the object's value and database value of the attribute.
      Specified by:
      getConverter in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • setConverter

      public void setConverter(Converter converter)
      Set the converter on the mapping. A converter can be used to convert between the object's value and database value of the attribute.
      Specified by:
      setConverter in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • buildBackupClone

      public void buildBackupClone(Object clone, Object backup, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork)
      INTERNAL: Clone the attribute from the clone and assign it to the backup.
      Specified by:
      buildBackupClone in class DatabaseMapping
    • buildClone

      public void buildClone(Object original, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, Object clone, Integer refreshCascade, org.eclipse.persistence.internal.sessions.AbstractSession cloningSession)
      INTERNAL: Clone the attribute from the original and assign it to the clone.
      Specified by:
      buildClone in class DatabaseMapping
    • buildCloneFromRow

      public void buildCloneFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord databaseRow, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, Object clone, org.eclipse.persistence.internal.identitymaps.CacheKey sharedCacheKey, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.sessions.AbstractSession executionSession)
      Description copied from class: DatabaseMapping
      INTERNAL: A combination of readFromRowIntoObject and buildClone.

      buildClone assumes the attribute value exists on the original and can simply be copied.

      readFromRowIntoObject assumes that one is building an original.

      Both of the above assumptions are false in this method, and actually attempts to do both at the same time.

      Extract value from the row and set the attribute to this value in the working copy clone. In order to bypass the shared cache when in transaction a UnitOfWork must be able to populate working copies directly from the row.

      Specified by:
      buildCloneFromRow in class DatabaseMapping
    • cascadePerformRemoveIfRequired

      public void cascadePerformRemoveIfRequired(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, Map visitedObjects)
      INTERNAL: Cascade perform delete through mappings that require the cascade
      Specified by:
      cascadePerformRemoveIfRequired in class DatabaseMapping
    • cascadeRegisterNewIfRequired

      public void cascadeRegisterNewIfRequired(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, Map visitedObjects)
      INTERNAL: Cascade registerNew for Create through mappings that require the cascade
      Specified by:
      cascadeRegisterNewIfRequired in class DatabaseMapping
    • compareForChange

      public org.eclipse.persistence.internal.sessions.ChangeRecord compareForChange(Object clone, Object backup, org.eclipse.persistence.internal.sessions.ObjectChangeSet owner, org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: This method was created in VisualAge.
      Specified by:
      compareForChange in class DatabaseMapping
      Returns:
      prototype.changeset.ChangeRecord
    • compareObjects

      public boolean compareObjects(Object firstObject, Object secondObject, org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL: Compare the attributes belonging to this mapping for the objects.
      Specified by:
      compareObjects in class DatabaseMapping
    • fixObjectReferences

      public void fixObjectReferences(Object object, Map objectDescriptors, Map processedObjects, ObjectLevelReadQuery query, DistributedSession session)
      INTERNAL: An object has been serialized from the server to the client. Replace the transient attributes of the remote value holders with client-side objects.
      Specified by:
      fixObjectReferences in class DatabaseMapping
    • getFieldValue

      public Object getFieldValue(Object object, org.eclipse.persistence.internal.core.sessions.CoreAbstractSession session, org.eclipse.persistence.internal.oxm.record.AbstractMarshalRecord record)
      INTERNAL:
      Specified by:
      getFieldValue in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • iterate

      public void iterate(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator)
      INTERNAL: Iterate on the appropriate attribute value.
      Specified by:
      iterate in class DatabaseMapping
    • mergeChangesIntoObject

      public void mergeChangesIntoObject(Object target, org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession)
      INTERNAL: Merge changes from the source to the target object.
      Specified by:
      mergeChangesIntoObject in class DatabaseMapping
    • mergeIntoObject

      public void mergeIntoObject(Object target, boolean isTargetUninitialized, Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager, org.eclipse.persistence.internal.sessions.AbstractSession targetSession)
      INTERNAL: Merge changes from the source to the target object.
      Specified by:
      mergeIntoObject in class DatabaseMapping
    • valueFromRow

      public Object valueFromRow(org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.identitymaps.CacheKey cacheKey, org.eclipse.persistence.internal.sessions.AbstractSession executionSession, boolean isTargetProtected, Boolean[] wasCacheUsed) throws DatabaseException
      Description copied from class: DatabaseMapping
      INTERNAL: A subclass should implement this method if it wants different behavior. Returns the value for the mapping from the database row. The execution session is the session the query was executed on, and its platform should be used for data conversion.
      Overrides:
      valueFromRow in class DatabaseMapping
      Throws:
      DatabaseException
    • writeFromObjectIntoRow

      public void writeFromObjectIntoRow(Object object, org.eclipse.persistence.internal.sessions.AbstractRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session, DatabaseMapping.WriteType writeType) throws DescriptorException
      Description copied from class: DatabaseMapping
      INTERNAL: A subclass should implement this method if it wants different behavior. Write the attribute value from the object to the row.
      Overrides:
      writeFromObjectIntoRow in class DatabaseMapping
      Throws:
      DescriptorException
    • writeSingleValue

      public void writeSingleValue(Object value, Object parent, XMLRecord row, org.eclipse.persistence.internal.sessions.AbstractSession session)
      Description copied from interface: XMLMapping
      INTERNAL: A method that marshals a single value to the provided Record based on this mapping's XPath. Used for Sequenced marshalling.
      Specified by:
      writeSingleValue in interface org.eclipse.persistence.internal.oxm.mappings.Mapping<org.eclipse.persistence.internal.sessions.AbstractSession,AttributeAccessor,org.eclipse.persistence.internal.queries.ContainerPolicy,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLRecord>
      Specified by:
      writeSingleValue in interface XMLMapping
      Parameters:
      value - - The value to be marshalled
      row - - The Record the value is being marshalled too.
    • readFromRowIntoObject

      public Object readFromRowIntoObject(org.eclipse.persistence.internal.sessions.AbstractRecord databaseRow, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, Object targetObject, org.eclipse.persistence.internal.identitymaps.CacheKey parentCacheKey, ObjectBuildingQuery sourceQuery, org.eclipse.persistence.internal.sessions.AbstractSession executionSession, boolean isTargetProtected) throws DatabaseException
      Description copied from class: DatabaseMapping
      INTERNAL: Extract value from the row and set the attribute to this value in the object. return value as this value will have been converted to the appropriate type for the object.
      Overrides:
      readFromRowIntoObject in class DatabaseMapping
      Throws:
      DatabaseException
    • isXMLMapping

      public boolean isXMLMapping()
      Description copied from class: DatabaseMapping
      INTERNAL: All relational mappings should implement this method to return true.
      Overrides:
      isXMLMapping in class DatabaseMapping
    • getFields

      public Vector<org.eclipse.persistence.internal.helper.DatabaseField> getFields()
      Description copied from class: DatabaseMapping
      INTERNAL: Returns a vector of all the fields this mapping represents.
      Specified by:
      getFields in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
      Overrides:
      getFields in class DatabaseMapping
    • collectFields

      protected Vector<org.eclipse.persistence.internal.helper.DatabaseField> collectFields()
      Description copied from class: DatabaseMapping
      This method must be overwritten in the subclasses to return a vector of all the fields this mapping represents.
      Overrides:
      collectFields in class DatabaseMapping
    • addChoiceElement

      public void addChoiceElement(String xpath, Class elementType)
    • addChoiceElement

      public void addChoiceElement(String srcXPath, Class elementType, String tgtXPath)
    • addChoiceElement

      public void addChoiceElement(String xpath, String elementTypeName, boolean xmlRoot)
    • addChoiceElement

      public void addChoiceElement(String srcXpath, String elementTypeName, String tgtXpath)
      Specified by:
      addChoiceElement in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • addChoiceElement

      public void addChoiceElement(String xpath, String elementTypeName)
    • addChoiceElement

      public void addChoiceElement(XMLField xmlField, Class elementType)
    • addChoiceElement

      public void addChoiceElement(XMLField sourceField, Class elementType, XMLField targetField)
    • addChoiceElement

      public void addChoiceElement(XMLField sourceField, String elementTypeName, XMLField targetField)
    • addChoiceElement

      public void addChoiceElement(List<XMLField> srcFields, Class elementType, List<XMLField> tgtFields)
    • addChoiceElement

      public void addChoiceElement(List<XMLField> srcFields, String elementTypeName, List<XMLField> tgtFields)
      Specified by:
      addChoiceElement in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • addChoiceElement

      public void addChoiceElement(XMLField field, String elementTypeName)
      Specified by:
      addChoiceElement in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getFieldToClassMappings

      public Map<XMLField,Class> getFieldToClassMappings()
      Specified by:
      getFieldToClassMappings in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • initialize

      public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session) throws DescriptorException
      Description copied from class: DatabaseMapping
      INTERNAL: Allow for initialization of properties and validation.
      Overrides:
      initialize in class DatabaseMapping
      Throws:
      DescriptorException
    • getClassToFieldMappings

      public Map<Class,XMLField> getClassToFieldMappings()
      Specified by:
      getClassToFieldMappings in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getChoiceElementMappings

      public Map<XMLField,XMLMapping> getChoiceElementMappings()
      Specified by:
      getChoiceElementMappings in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • convertClassNamesToClasses

      public void convertClassNamesToClasses(ClassLoader classLoader)
      Description copied from class: DatabaseMapping
      INTERNAL: Convert all the class-name-based settings in this mapping to actual class-based settings This method is implemented by subclasses as necessary.
      Specified by:
      convertClassNamesToClasses in interface org.eclipse.persistence.internal.oxm.mappings.Mapping<org.eclipse.persistence.internal.sessions.AbstractSession,AttributeAccessor,org.eclipse.persistence.internal.queries.ContainerPolicy,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLRecord>
      Specified by:
      convertClassNamesToClasses in interface XMLMapping
      Overrides:
      convertClassNamesToClasses in class DatabaseMapping
    • addConverter

      public void addConverter(XMLField field, Converter converter)
      Specified by:
      addConverter in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getConverter

      public Converter getConverter(XMLField field)
      Specified by:
      getConverter in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getChoiceFieldToClassAssociations

      public ArrayList getChoiceFieldToClassAssociations()
      Specified by:
      getChoiceFieldToClassAssociations in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • setChoiceFieldToClassAssociations

      public void setChoiceFieldToClassAssociations(ArrayList associations)
    • isWriteOnly

      public boolean isWriteOnly()
      Description copied from class: DatabaseMapping
      INTERNAL: Some mappings support no attribute (transformation and multitenant primary key).
      Specified by:
      isWriteOnly in interface XMLMapping
      Overrides:
      isWriteOnly in class DatabaseMapping
    • setIsWriteOnly

      public void setIsWriteOnly(boolean b)
      Specified by:
      setIsWriteOnly in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
      Specified by:
      setIsWriteOnly in interface XMLMapping
    • preInitialize

      public void preInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session) throws DescriptorException
      Description copied from class: DatabaseMapping
      INTERNAL: Allow for initialization of properties and validation.
      Overrides:
      preInitialize in class DatabaseMapping
      Throws:
      DescriptorException
    • setAttributeValueInObject

      public void setAttributeValueInObject(Object object, Object value) throws DescriptorException
      Description copied from class: DatabaseMapping
      INTERNAL: Set the value of the attribute mapped by this mapping.
      Specified by:
      setAttributeValueInObject in interface org.eclipse.persistence.internal.oxm.mappings.Mapping<org.eclipse.persistence.internal.sessions.AbstractSession,AttributeAccessor,org.eclipse.persistence.internal.queries.ContainerPolicy,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLRecord>
      Overrides:
      setAttributeValueInObject in class DatabaseMapping
      Throws:
      DescriptorException
    • getClassToSourceFieldsMappings

      public Map<Class,List<XMLField>> getClassToSourceFieldsMappings()
      Specified by:
      getClassToSourceFieldsMappings in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getClassNameToFieldMappings

      public Map<String,XMLField> getClassNameToFieldMappings()
      Specified by:
      getClassNameToFieldMappings in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • getChoiceElementMappingsByClass

      public Map<Class,XMLMapping> getChoiceElementMappingsByClass()
      Specified by:
      getChoiceElementMappingsByClass in interface org.eclipse.persistence.internal.oxm.mappings.ChoiceObjectMapping<AttributeAccessor,org.eclipse.persistence.internal.sessions.AbstractSession,org.eclipse.persistence.internal.queries.ContainerPolicy,Converter,ClassDescriptor,org.eclipse.persistence.internal.helper.DatabaseField,XMLMarshaller,Session,XMLUnmarshaller,XMLField,XMLMapping,XMLRecord>
    • setChoiceElementMappingsByClass

      public void setChoiceElementMappingsByClass(Map<Class,XMLMapping> choiceElementMappingsByClass)
    • convertObjectValueToDataValue

      public Object convertObjectValueToDataValue(Object value, Session session, XMLMarshaller marshaller)
      INTERNAL
      Specified by:
      convertObjectValueToDataValue in interface org.eclipse.persistence.internal.oxm.mappings.XMLConverterMapping<XMLMarshaller,Session,XMLUnmarshaller>
    • convertDataValueToObjectValue

      public Object convertDataValueToObjectValue(Object fieldValue, Session session, XMLUnmarshaller unmarshaller)
      INTERNAL
      Specified by:
      convertDataValueToObjectValue in interface org.eclipse.persistence.internal.oxm.mappings.XMLConverterMapping<XMLMarshaller,Session,XMLUnmarshaller>