Package org.apache.axis
Class MessageContext
- java.lang.Object
-
- org.apache.axis.MessageContext
-
- All Implemented Interfaces:
MessageContext
,SOAPMessageContext
public class MessageContext extends java.lang.Object implements SOAPMessageContext
A MessageContext is the Axis implementation of the javax SOAPMessageContext class, and is core to message processing in handlers and other parts of the system. This class also contains constants for accessing some well-known properties. Using a hierarchical namespace is strongly suggested in order to lower the chance for conflicts. (These constants should be viewed as an explicit list of well known and widely used context keys, there's nothing wrong with directly using the key strings. This is the reason for the hierarchical constant namespace. Actually I think we might just list the keys in the docs and provide no such constants since they create yet another namespace, but we'd have no compile-time checks then. Whaddya think? - todo by Jacek)- Author:
- Doug Davis (dug@us.ibm.com), Jacek Kopecky (jacek@idoox.com)
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ACCEPTMISSINGPARAMS
A boolean param, to control whether we accept missing parameters as nulls or refuse to acknowledge them.static java.lang.String
ATTACHMENTS_DIR
The directory where in coming attachments are created.static java.lang.String
AUTHUSER
Place to store an AuthenticatedUser.static java.lang.String
CALL
If on the client - this is the Call object.static java.lang.String
ENGINE_HANDLER
Contains an instance of Handler, which is the ServiceContext and the entrypoint of this service.static java.lang.String
HTTP_TRANSPORT_VERSION
The value of the property is used by service WSDL generation (aka ?WSDL).static java.lang.String
IS_MSG
Are we doing Msg vs RPC? - For Java Binding.protected static org.apache.commons.logging.Log
log
TheLog
used for logging all messages.static java.lang.String
QUIT_REQUESTED
Has a quit been requested? Hackish...static java.lang.String
SECURITY_PROVIDER
The security provider.protected static java.lang.String
systemTempDir
Temporary directory to store attachments.static java.lang.String
TRANS_URL
This String is the URL that the message came to.static java.lang.String
WSDLGEN_INTFNAMESPACE
The value of the property is used by service WSDL generation (aka ?WSDL) For the service's interface namespace if not set TRANS_URL property is used.static java.lang.String
WSDLGEN_SERV_LOC_URL
The value of the property is used by service WSDL generation (aka ?WSDL).
-
Constructor Summary
Constructors Constructor Description MessageContext(AxisEngine engine)
Create a message context.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
containsProperty(java.lang.String name)
Returns true if the MessageContext contains a property with the specified name.void
dispose()
if a message (or subclass) has any disposal needs, this method is where it goes.protected void
finalize()
during finalization, the dispose() method is called.java.util.Iterator
getAllPropertyNames()
Returns an Iterator view of the names of the properties in this MessageContext and any parents of the LockableHashtableAxisEngine
getAxisEngine()
Get the axis engine.java.lang.ClassLoader
getClassLoader()
Get the classloader, implicitly binding to the thread context classloader if an override has not been supplied.static MessageContext
getCurrentContext()
Get the active message context.Message
getCurrentMessage()
Return the current (i.e.java.lang.String
getEncodingStyle()
Returns the encoding style as a URI that should be used for the SOAP message.boolean
getMaintainSession()
Discover if we are maintaining session state.SOAPMessage
getMessage()
Gets the SOAPMessage from this message context.OperationDesc
getOperation()
The current operation.OperationDesc
getOperationByQName(QName qname)
get the first possible operation that could match a body containing an element of the given QName.Style
getOperationStyle()
Get the operation style.Use
getOperationUse()
Get the operation use.java.lang.String
getPassword()
Get the password.boolean
getPastPivot()
Determine when we've passed the pivot.OperationDesc[]
getPossibleOperationsByQName(QName qname)
Returns a list of operation descriptors that could may possibly match a body containing an element of the given QName.java.lang.Object
getProperty(java.lang.String name)
Returns the value associated with the named property - or null if not defined/set.java.util.Iterator
getPropertyNames()
Returns anIterator
view of the names of the properties in thisMessageContext
.Message
getRequestMessage()
Get the request message.Message
getResponseMessage()
Get the response message.java.lang.String[]
getRoles()
Gets the SOAP actor roles associated with an execution of theHandlerChain
and its containedHandler
instances.SchemaVersion
getSchemaVersion()
Get the XML schema version information.SOAPService
getService()
Get theSOAPService
used to handle services in this context.Session
getSession()
Get the current session.java.lang.String
getSOAPActionURI()
Get the soapAction URI.SOAPConstants
getSOAPConstants()
Get theSOAPConstants
used by this message context.java.lang.String
getStrProp(java.lang.String propName)
Get aString
property by name.java.lang.String
getTargetService()
Get the name of the targed service for this message.int
getTimeout()
Get timeout from our MessageContext.java.lang.String
getTransportName()
The name of the transport for this context.TypeMapping
getTypeMapping()
Return the type mapping currently in scope for our encoding style.TypeMappingRegistry
getTypeMappingRegistry()
Get the currently in-scope type mapping registry.java.lang.String
getUsername()
Get the user name.boolean
isClient()
Let us know whether this is the client or the server.boolean
isEncoded()
Indicates if the opration is encoded.boolean
isHighFidelity()
Read the high fidelity property.boolean
isPropertyTrue(java.lang.String propName)
Tests to see if the named property is set in the 'bag', returningfalse
if it is not present at all.boolean
isPropertyTrue(java.lang.String propName, boolean defaultVal)
Test if a property is set to something we consider to be true in the 'bag'.void
removeProperty(java.lang.String propName)
Removes a property (name-value pair) from theMessageContext
.void
reset()
Return this context to a clean state.void
setClassLoader(java.lang.ClassLoader cl)
Set a new classloader.void
setCurrentMessage(Message curMsg)
Set the current message.void
setEncodingStyle(java.lang.String namespaceURI)
Sets the encoding style to the URI passed in.void
setHighFidelity(boolean highFidelity)
Set the high fidelity propert.void
setMaintainSession(boolean yesno)
Set whether we are maintaining session state.void
setMessage(SOAPMessage message)
Sets the SOAPMessage for this message context.void
setOperation(OperationDesc operation)
Set the current operation.void
setPassword(java.lang.String password)
Set the password.void
setPastPivot(boolean pastPivot)
Indicate when we've passed the pivot.void
setProperty(java.lang.String name, java.lang.Object value)
Allows you to set a named property to the passed in value.void
setPropertyParent(java.util.Hashtable parent)
Set the Hashtable that contains the default values for our properties.void
setRequestMessage(Message reqMsg)
Set the request message, and make sure that message is associated with this MessageContext.void
setResponseMessage(Message respMsg)
Set the response message, and make sure that message is associated with this MessageContext.void
setRoles(java.lang.String[] roles)
Set the SOAP actor roles associated with an executioni ofCodeHandlerChain
and its containedHandler
instances.void
setSchemaVersion(SchemaVersion schemaVersion)
Set the XML schema version this message context will use.void
setService(SOAPService sh)
Set theSOAPService
used to handle services in this context.void
setSession(Session session)
Set the current session.void
setSOAPActionURI(java.lang.String SOAPActionURI)
Set the soapAction URI.void
setSOAPConstants(SOAPConstants soapConstants)
Set theSOAPConstants
used by this message context.void
setTargetService(java.lang.String tServ)
Set the target service for this message.void
setTimeout(int value)
Set timeout in our MessageContext.void
setTransportName(java.lang.String transportName)
Set the transport name for this context.void
setTypeMappingRegistry(TypeMappingRegistry reg)
Replace the engine's type mapping registry with a local one.void
setUsername(java.lang.String username)
Set the username.void
setUseSOAPAction(boolean useSOAPAction)
Enable or dissable the use of soap action information.boolean
useSOAPAction()
Indicates wether the soap action URI is being used or not.
-
-
-
Field Detail
-
log
protected static org.apache.commons.logging.Log log
TheLog
used for logging all messages.
-
systemTempDir
protected static java.lang.String systemTempDir
Temporary directory to store attachments.
-
ENGINE_HANDLER
public static final java.lang.String ENGINE_HANDLER
Contains an instance of Handler, which is the ServiceContext and the entrypoint of this service. (if it has been so configured - will our deployment tool do this by default? - todo by Jacek)- See Also:
- Constant Field Values
-
TRANS_URL
public static final java.lang.String TRANS_URL
This String is the URL that the message came to.- See Also:
- Constant Field Values
-
QUIT_REQUESTED
public static final java.lang.String QUIT_REQUESTED
Has a quit been requested? Hackish... but useful... -- RobJ- See Also:
- Constant Field Values
-
AUTHUSER
public static final java.lang.String AUTHUSER
Place to store an AuthenticatedUser.- See Also:
- Constant Field Values
-
CALL
public static final java.lang.String CALL
If on the client - this is the Call object.- See Also:
- Constant Field Values
-
IS_MSG
public static final java.lang.String IS_MSG
Are we doing Msg vs RPC? - For Java Binding.- See Also:
- Constant Field Values
-
ATTACHMENTS_DIR
public static final java.lang.String ATTACHMENTS_DIR
The directory where in coming attachments are created.- See Also:
- Constant Field Values
-
ACCEPTMISSINGPARAMS
public static final java.lang.String ACCEPTMISSINGPARAMS
A boolean param, to control whether we accept missing parameters as nulls or refuse to acknowledge them.- See Also:
- Constant Field Values
-
WSDLGEN_INTFNAMESPACE
public static final java.lang.String WSDLGEN_INTFNAMESPACE
The value of the property is used by service WSDL generation (aka ?WSDL) For the service's interface namespace if not set TRANS_URL property is used.- See Also:
- Constant Field Values
-
WSDLGEN_SERV_LOC_URL
public static final java.lang.String WSDLGEN_SERV_LOC_URL
The value of the property is used by service WSDL generation (aka ?WSDL). For the service's location if not set TRANS_URL property is used. (helps provide support through proxies.- See Also:
- Constant Field Values
-
HTTP_TRANSPORT_VERSION
public static final java.lang.String HTTP_TRANSPORT_VERSION
The value of the property is used by service WSDL generation (aka ?WSDL). Set this property to request a certain level of HTTP. The values MUST use org.apache.axis.transport.http.HTTPConstants.HEADER_PROTOCOL_10 for HTTP 1.0 The values MUST use org.apache.axis.transport.http.HTTPConstants.HEADER_PROTOCOL_11 for HTTP 1.1- See Also:
- Constant Field Values
-
SECURITY_PROVIDER
public static final java.lang.String SECURITY_PROVIDER
The security provider.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
MessageContext
public MessageContext(AxisEngine engine)
Create a message context.- Parameters:
engine
- the controlling axis engine. Null is actually accepted here, though passing a null engine in is strongly discouraged as many of the methods assume that it is in fact defined.
-
-
Method Detail
-
getOperation
public OperationDesc getOperation()
The current operation.- Returns:
- the current operation; may be
null
-
setOperation
public void setOperation(OperationDesc operation)
Set the current operation.- Parameters:
operation
- theOperation
this context is executing
-
getPossibleOperationsByQName
public OperationDesc[] getPossibleOperationsByQName(QName qname) throws AxisFault
Returns a list of operation descriptors that could may possibly match a body containing an element of the given QName. For non-DOCUMENT, the list of operation descriptors that match the name is returned. For DOCUMENT, all the operations that have qname as a parameter are returned- Parameters:
qname
- of the first element in the body- Returns:
- list of operation descriptions
- Throws:
AxisFault
- if the operation names could not be looked up
-
getOperationByQName
public OperationDesc getOperationByQName(QName qname) throws AxisFault
get the first possible operation that could match a body containing an element of the given QName. Sets the currentOperation field in the process; if that field is already set then its value is returned instead- Parameters:
qname
- name of the message body- Returns:
- an operation or null
- Throws:
AxisFault
-
getCurrentContext
public static MessageContext getCurrentContext()
Get the active message context.- Returns:
- the current active message context
-
finalize
protected void finalize()
during finalization, the dispose() method is called.- Overrides:
finalize
in classjava.lang.Object
- See Also:
dispose()
-
setTypeMappingRegistry
public void setTypeMappingRegistry(TypeMappingRegistry reg)
Replace the engine's type mapping registry with a local one. This will have no effect on any type mappings obtained before this call.- Parameters:
reg
- the newTypeMappingRegistry
-
getTypeMappingRegistry
public TypeMappingRegistry getTypeMappingRegistry()
Get the currently in-scope type mapping registry. By default, will return a reference to the AxisEngine's TMR until someone sets our local one (usually as a result of setting the serviceHandler).- Returns:
- the type mapping registry to use for this request.
-
getTypeMapping
public TypeMapping getTypeMapping()
Return the type mapping currently in scope for our encoding style.- Returns:
- the type mapping
-
getTransportName
public java.lang.String getTransportName()
The name of the transport for this context.- Returns:
- the transport name
-
setTransportName
public void setTransportName(java.lang.String transportName)
Set the transport name for this context.- Parameters:
transportName
- the name of the transport
-
getSOAPConstants
public SOAPConstants getSOAPConstants()
Get theSOAPConstants
used by this message context.- Returns:
- the soap constants
-
setSOAPConstants
public void setSOAPConstants(SOAPConstants soapConstants)
Set theSOAPConstants
used by this message context. This may also affect the encoding style.- Parameters:
soapConstants
- the new soap constants to use
-
getSchemaVersion
public SchemaVersion getSchemaVersion()
Get the XML schema version information.- Returns:
- the
SchemaVersion
in use
-
setSchemaVersion
public void setSchemaVersion(SchemaVersion schemaVersion)
Set the XML schema version this message context will use.- Parameters:
schemaVersion
- the newSchemaVersion
-
getSession
public Session getSession()
Get the current session.- Returns:
- the
Session
this message context is within
-
setSession
public void setSession(Session session)
Set the current session.- Parameters:
session
- the newSession
-
isEncoded
public boolean isEncoded()
Indicates if the opration is encoded.- Returns:
true
if it is encoded,false
otherwise
-
setMaintainSession
public void setMaintainSession(boolean yesno)
Set whether we are maintaining session state.- Parameters:
yesno
- flag to set totrue
to maintain sessions
-
getMaintainSession
public boolean getMaintainSession()
Discover if we are maintaining session state.- Returns:
true
if we are maintaining state,false
otherwise
-
getRequestMessage
public Message getRequestMessage()
Get the request message.- Returns:
- the request message (may be null).
-
setRequestMessage
public void setRequestMessage(Message reqMsg)
Set the request message, and make sure that message is associated with this MessageContext.- Parameters:
reqMsg
- the new request Message.
-
getResponseMessage
public Message getResponseMessage()
Get the response message.- Returns:
- the response message (may be null).
-
setResponseMessage
public void setResponseMessage(Message respMsg)
Set the response message, and make sure that message is associated with this MessageContext.- Parameters:
respMsg
- the new response Message.
-
getCurrentMessage
public Message getCurrentMessage()
Return the current (i.e. request before the pivot, response after) message.- Returns:
- the current
Message
-
getMessage
public SOAPMessage getMessage()
Gets the SOAPMessage from this message context.- Specified by:
getMessage
in interfaceSOAPMessageContext
- Returns:
- the
SOAPMessage
,null
if no requestSOAPMessage
is present in thisSOAPMessageContext
-
setCurrentMessage
public void setCurrentMessage(Message curMsg)
Set the current message. This will set the request before the pivot, and the response afterwards, as guaged by the passedPivod property.- Parameters:
curMsg
- theMessage
to assign
-
setMessage
public void setMessage(SOAPMessage message)
Sets the SOAPMessage for this message context. This is equivalent to castingmessage
toMessage
and then passing it on tosetCurrentMessage()
.- Specified by:
setMessage
in interfaceSOAPMessageContext
- Parameters:
message
- theSOAPMessage
this context is for
-
getPastPivot
public boolean getPastPivot()
Determine when we've passed the pivot.- Returns:
true
if we have,false
otherwise
-
setPastPivot
public void setPastPivot(boolean pastPivot)
Indicate when we've passed the pivot.- Parameters:
pastPivot
- true if we are past the pivot point, false otherwise
-
setTimeout
public void setTimeout(int value)
Set timeout in our MessageContext.- Parameters:
value
- the maximum amount of time, in milliseconds
-
getTimeout
public int getTimeout()
Get timeout from our MessageContext.- Returns:
- value the maximum amount of time, in milliseconds
-
getClassLoader
public java.lang.ClassLoader getClassLoader()
Get the classloader, implicitly binding to the thread context classloader if an override has not been supplied.- Returns:
- the class loader
-
setClassLoader
public void setClassLoader(java.lang.ClassLoader cl)
Set a new classloader. Setting to null will result in getClassLoader() binding back to the thread context class loader.- Parameters:
cl
- the newClassLoader
ornull
-
getTargetService
public java.lang.String getTargetService()
Get the name of the targed service for this message.- Returns:
- the target service
-
getAxisEngine
public AxisEngine getAxisEngine()
Get the axis engine. This will benull
if the message was created outside an engine- Returns:
- the current axis engine
-
setTargetService
public void setTargetService(java.lang.String tServ) throws AxisFault
Set the target service for this message.This looks up the named service in the registry, and has the side effect of setting our TypeMappingRegistry to the service's.
- Parameters:
tServ
- the name of the target service- Throws:
AxisFault
- if anything goes wrong in resolving or setting the service
-
getService
public SOAPService getService()
Get theSOAPService
used to handle services in this context.- Returns:
- the service handler
-
setService
public void setService(SOAPService sh) throws AxisFault
Set theSOAPService
used to handle services in this context. This method configures a wide range ofMessageContext
properties to suit the handler.- Parameters:
sh
- the new service handler- Throws:
AxisFault
- if the service could not be set
-
isClient
public boolean isClient()
Let us know whether this is the client or the server.- Returns:
- true if we are a client
-
getStrProp
public java.lang.String getStrProp(java.lang.String propName)
Get aString
property by name.- Parameters:
propName
- the name of the property to fetch- Returns:
- the value of the named property
- Throws:
java.lang.ClassCastException
- if the property named does not have aString
value
-
isPropertyTrue
public boolean isPropertyTrue(java.lang.String propName)
Tests to see if the named property is set in the 'bag', returningfalse
if it is not present at all. This is equivalent toisPropertyTrue(propName, false)
.- Parameters:
propName
- the name of the property to check- Returns:
- true or false, depending on the value of the property
-
isPropertyTrue
public boolean isPropertyTrue(java.lang.String propName, boolean defaultVal)
Test if a property is set to something we consider to be true in the 'bag'.- If not there then
defaultVal
is returned. - If there, then...
- if its a
Boolean
, we'll return booleanValue() - if its an
Integer
, we'll returnfalse
if its0
elsetrue
- if its a
String
we'll returnfalse
if its"false"
" or"0"
elsetrue
- All other types return
true
- if its a
- Parameters:
propName
- the name of the property to checkdefaultVal
- the default value- Returns:
- true or false, depending on the value of the property
- If not there then
-
setProperty
public void setProperty(java.lang.String name, java.lang.Object value)
Allows you to set a named property to the passed in value. There are a few known properties (like username, password, etc) that are variables in Call. The rest of the properties are stored in a Hashtable. These common properties should be accessed via the accessors for speed/type safety, but they may still be obtained via this method. It's up to one of the Handlers (or the Axis engine itself) to go looking for one of them.- Specified by:
setProperty
in interfaceMessageContext
- Parameters:
name
- Name of the propertyvalue
- Value of the property
-
containsProperty
public boolean containsProperty(java.lang.String name)
Returns true if the MessageContext contains a property with the specified name.- Specified by:
containsProperty
in interfaceMessageContext
- Parameters:
name
- Name of the property whose presense is to be tested- Returns:
- Returns true if the MessageContext contains the property; otherwise false
-
getPropertyNames
public java.util.Iterator getPropertyNames()
Returns anIterator
view of the names of the properties in thisMessageContext
.- Specified by:
getPropertyNames
in interfaceMessageContext
- Returns:
- an
Iterator
over all property names
-
getAllPropertyNames
public java.util.Iterator getAllPropertyNames()
Returns an Iterator view of the names of the properties in this MessageContext and any parents of the LockableHashtable- Returns:
- Iterator for the property names
-
getProperty
public java.lang.Object getProperty(java.lang.String name)
Returns the value associated with the named property - or null if not defined/set.- Specified by:
getProperty
in interfaceMessageContext
- Parameters:
name
- the property name- Returns:
- Object value of the property - or null
-
setPropertyParent
public void setPropertyParent(java.util.Hashtable parent)
Set the Hashtable that contains the default values for our properties.- Parameters:
parent
-
-
setUsername
public void setUsername(java.lang.String username)
Set the username.- Parameters:
username
- the new user name
-
getUsername
public java.lang.String getUsername()
Get the user name.- Returns:
- the user name as a
String
-
setPassword
public void setPassword(java.lang.String password)
Set the password.- Parameters:
password
- aString
containing the new password
-
getPassword
public java.lang.String getPassword()
Get the password.- Returns:
- the current password
String
-
getOperationStyle
public Style getOperationStyle()
Get the operation style. This is either the style of the current operation or if that is not set, the style of the service handler, or if that is not set,Style.RPC
.- Returns:
- the
Style
of this message
-
getOperationUse
public Use getOperationUse()
Get the operation use.- Returns:
- the operation
Use
-
setUseSOAPAction
public void setUseSOAPAction(boolean useSOAPAction)
Enable or dissable the use of soap action information. When enabled, the message context will attempt to use the soap action URI information during binding of soap messages to service methods. When dissabled, it will make no such attempt.- Parameters:
useSOAPAction
-true
if soap action URI information should be used,false
otherwise
-
useSOAPAction
public boolean useSOAPAction()
Indicates wether the soap action URI is being used or not.- Returns:
true
if it is,false
otherwise
-
setSOAPActionURI
public void setSOAPActionURI(java.lang.String SOAPActionURI) throws java.lang.IllegalArgumentException
Set the soapAction URI.- Parameters:
SOAPActionURI
- aString
giving the new soap action URI- Throws:
java.lang.IllegalArgumentException
- if the URI is not liked
-
getSOAPActionURI
public java.lang.String getSOAPActionURI()
Get the soapAction URI.- Returns:
- the URI of this soap action
-
setEncodingStyle
public void setEncodingStyle(java.lang.String namespaceURI)
Sets the encoding style to the URI passed in.- Parameters:
namespaceURI
- URI of the encoding to use.
-
getEncodingStyle
public java.lang.String getEncodingStyle()
Returns the encoding style as a URI that should be used for the SOAP message.- Returns:
- String URI of the encoding style to use
-
removeProperty
public void removeProperty(java.lang.String propName)
Description copied from interface:MessageContext
Removes a property (name-value pair) from theMessageContext
.- Specified by:
removeProperty
in interfaceMessageContext
- Parameters:
propName
- the name of the property to be removed
-
reset
public void reset()
Return this context to a clean state.
-
isHighFidelity
public boolean isHighFidelity()
Read the high fidelity property.Some behavior may be apropreate for high fidelity contexts that is not relevant for low fidelity ones or vica-versa.
- Returns:
true
if the context is high fidelity,false
otherwise
-
setHighFidelity
public void setHighFidelity(boolean highFidelity)
Set the high fidelity propert.Users of the context may be changing what they do based upon this flag.
- Parameters:
highFidelity
- the new value of the highFidelity property
-
getRoles
public java.lang.String[] getRoles()
Gets the SOAP actor roles associated with an execution of theHandlerChain
and its containedHandler
instances.Not (yet) implemented method in the SOAPMessageContext interface.
Note: SOAP actor roles apply to the SOAP node and are managed using
HandlerChain.setRoles()
andHandlerChain.getRoles()
. Handler instances in theHandlerChain
use this information about the SOAP actor roles to process the SOAP header blocks. Note that the SOAP actor roles are invariant during the processing of SOAP message through theHandlerChain
.- Specified by:
getRoles
in interfaceSOAPMessageContext
- Returns:
- an array of URIs for SOAP actor roles
- See Also:
HandlerChain.setRoles(java.lang.String[])
,HandlerChain.getRoles()
-
setRoles
public void setRoles(java.lang.String[] roles)
Set the SOAP actor roles associated with an executioni ofCodeHandlerChain
and its containedHandler
instances.- Parameters:
roles
- an array ofString
instances, each representing the URI for a SOAP actor role
-
dispose
public void dispose()
if a message (or subclass) has any disposal needs, this method is where it goes. Subclasses *must* call super.dispose(), and be prepared to be called from the finalizer as well as earlier
-
-