Package org.apache.axis.encoding
Class TypeMappingRegistryImpl
- java.lang.Object
-
- org.apache.axis.encoding.TypeMappingRegistryImpl
-
- All Implemented Interfaces:
java.io.Serializable
,TypeMappingRegistry
,TypeMappingRegistry
public class TypeMappingRegistryImpl extends java.lang.Object implements TypeMappingRegistry
The TypeMappingRegistry keeps track of the individual TypeMappings.
The TypeMappingRegistry for axis contains a default type mapping that is set for either SOAP 1.1 or SOAP 1.2 The default type mapping is a singleton used for the entire runtime and should not have anything new registered in it.
Instead the new TypeMappings for the deploy and service are made in a separate TypeMapping which is identified by the soap encoding. These new TypeMappings delegate back to the default type mapping when information is not found.
So logically we have:
TMR | | | +---------------> DefaultTM | ^ | | +----> TM --delegate---+
But in the implementation, the TMR references "delegate" TypeMappings (TM') which then reference the actual TM'sSo the picture is really:
TMR | | | +-----------TM'------> DefaultTM | ^ | | +-TM'-> TM ----+
This extra indirection is necessary because the user may want to change the default type mapping. In such cases, the TMR just needs to adjust the TM' for the DefaultTM, and all of the other TMs will properly delegate to the new one. Here's the picture:TMR | | | +-----------TM'--+ DefaultTM | ^ | | | +---> New User Defined Default TM +-TM'-> TM ----+
The other reason that it is necessary is when a deploy has a TMR, and then TMR's are defined for the individual services in such cases the delegate() method is invoked on the service to delegate to the deploy TMRDeploy TMR | | | +-----------TM'------> DefaultTM | ^ | | +-TM'-> TM ----+ Service TMR | | | +-----------TM'------> DefaultTM | ^ | | +-TM'-> TM ----+ ServiceTMR.delegate(DeployTMR) Deploy TMR | | | +------------TM'------> DefaultTM | ^ ^ | | | +-TM'-> TM ----+ | ^ | +-------+ | | | | Service TMR | | | | | | | +----------TM'-+ | | | | | +-TM'-> TM + | | +----------------+
So now the service uses the DefaultTM of the Deploy TMR, and the Service TM properly delegates to the deploy's TM. And if either the deploy defaultTM or TMs change, the links are not broken.- Author:
- James Snell (jasnell@us.ibm.com), Sam Ruby (rubys@us.ibm.com) Re-written for JAX-RPC Compliance by, Rich Scheuerle (scheu@us.ibm.com
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description TypeMappingRegistryImpl()
Construct TypeMappingRegistryTypeMappingRegistryImpl(boolean registerDefaults)
TypeMappingRegistryImpl(TypeMappingImpl tm)
Construct TypeMappingRegistry
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
Removes all TypeMappings and namespaceURIs from this TypeMappingRegistry.TypeMapping
createTypeMapping()
Creates a new empty TypeMapping object for the specified encoding style or XML schema namespace.void
delegate(TypeMappingRegistry secondaryTMR)
delegate Changes the contained type mappings to delegate to their corresponding types in the secondary TMR.void
doRegisterFromVersion(java.lang.String version)
Set up the default type mapping (and the SOAP encoding type mappings) as per the passed "version" option.TypeMapping
getDefaultTypeMapping()
Return the default TypeMappingTypeMapping
getOrMakeTypeMapping(java.lang.String encodingStyle)
Obtain a type mapping for the given encodingStyle.java.lang.String[]
getRegisteredEncodingStyleURIs()
Gets a list of namespace URIs registered with this TypeMappingRegistry.TypeMapping
getTypeMapping(java.lang.String namespaceURI)
Gets the TypeMapping for the namespace.TypeMapping
register(java.lang.String namespaceURI, TypeMapping mapping)
The method register adds a TypeMapping instance for a specific namespacevoid
registerDefault(TypeMapping mapping)
The method register adds a default TypeMapping instance.boolean
removeTypeMapping(TypeMapping mapping)
Removes the TypeMapping for the namespace.TypeMapping
unregisterTypeMapping(java.lang.String namespaceURI)
Unregisters the TypeMapping for the namespace.
-
-
-
Constructor Detail
-
TypeMappingRegistryImpl
public TypeMappingRegistryImpl(TypeMappingImpl tm)
Construct TypeMappingRegistry- Parameters:
tm
-
-
TypeMappingRegistryImpl
public TypeMappingRegistryImpl()
Construct TypeMappingRegistry
-
TypeMappingRegistryImpl
public TypeMappingRegistryImpl(boolean registerDefaults)
-
-
Method Detail
-
delegate
public void delegate(TypeMappingRegistry secondaryTMR)
delegate Changes the contained type mappings to delegate to their corresponding types in the secondary TMR.- Specified by:
delegate
in interfaceTypeMappingRegistry
-
register
public TypeMapping register(java.lang.String namespaceURI, TypeMapping mapping)
The method register adds a TypeMapping instance for a specific namespace- Specified by:
register
in interfaceTypeMappingRegistry
- Parameters:
namespaceURI
-mapping
- - TypeMapping for specific namespaces- Returns:
- Previous TypeMapping associated with the specified namespaceURI, or null if there was no TypeMapping associated with the specified namespaceURI
-
registerDefault
public void registerDefault(TypeMapping mapping)
The method register adds a default TypeMapping instance. If a specific TypeMapping is not found, the default TypeMapping is used.- Specified by:
registerDefault
in interfaceTypeMappingRegistry
- Parameters:
mapping
- - TypeMapping for specific type namespaces java.lang.IllegalArgumentException - if an invalid type mapping is specified or the delegate is already set
-
doRegisterFromVersion
public void doRegisterFromVersion(java.lang.String version)
Set up the default type mapping (and the SOAP encoding type mappings) as per the passed "version" option.- Parameters:
version
-
-
getTypeMapping
public TypeMapping getTypeMapping(java.lang.String namespaceURI)
Gets the TypeMapping for the namespace. If not found, the default TypeMapping is returned.- Specified by:
getTypeMapping
in interfaceTypeMappingRegistry
- Parameters:
namespaceURI
- - The namespace URI of a Web Service- Returns:
- The registered TypeMapping (which may be the default TypeMapping) or null.
-
getOrMakeTypeMapping
public TypeMapping getOrMakeTypeMapping(java.lang.String encodingStyle)
Obtain a type mapping for the given encodingStyle. If no specific mapping exists for this encodingStyle, we will create and register one before returning it.- Specified by:
getOrMakeTypeMapping
in interfaceTypeMappingRegistry
- Parameters:
encodingStyle
-- Returns:
- a registered TypeMapping for the given encodingStyle
-
unregisterTypeMapping
public TypeMapping unregisterTypeMapping(java.lang.String namespaceURI)
Unregisters the TypeMapping for the namespace.- Specified by:
unregisterTypeMapping
in interfaceTypeMappingRegistry
- Parameters:
namespaceURI
- - The namespace URI- Returns:
- The registered TypeMapping .
-
removeTypeMapping
public boolean removeTypeMapping(TypeMapping mapping)
Removes the TypeMapping for the namespace.- Specified by:
removeTypeMapping
in interfaceTypeMappingRegistry
- Parameters:
mapping
- The type mapping to remove- Returns:
- true if found and removed
-
createTypeMapping
public TypeMapping createTypeMapping()
Creates a new empty TypeMapping object for the specified encoding style or XML schema namespace.- Specified by:
createTypeMapping
in interfaceTypeMappingRegistry
- Returns:
- An empty generic TypeMapping object
-
getRegisteredEncodingStyleURIs
public java.lang.String[] getRegisteredEncodingStyleURIs()
Gets a list of namespace URIs registered with this TypeMappingRegistry.- Specified by:
getRegisteredEncodingStyleURIs
in interfaceTypeMappingRegistry
- Returns:
- String[] containing names of all registered namespace URIs
-
clear
public void clear()
Removes all TypeMappings and namespaceURIs from this TypeMappingRegistry.- Specified by:
clear
in interfaceTypeMappingRegistry
-
getDefaultTypeMapping
public TypeMapping getDefaultTypeMapping()
Return the default TypeMapping- Specified by:
getDefaultTypeMapping
in interfaceTypeMappingRegistry
- Returns:
- TypeMapping or null
-
-