Recently I integrated REST (Representational State Transfer) and SOAP (Simple Object Access Protocol) WebServices (WS) into a single context. i.e both the service end points were mapped to single context path. The REST WS was a simple authentication servlet application and SOAP WS was a AAR (Axis Archive file) file generated via AXIS2 plugin and deployed with Apache AXIS2 support. Also some of the stateful information from REST service needed to be obtained in SOAP service. But how? SOAP WS is a simple class with some methods exposed as service using Axis framework. Then how can I obtain the details from the other services deployed under same context path.
I was thinking for a solution. I realized that if it is same context then the Servlet Request object can be shared across. So, if values are set in session then it can be transformed across the application with state maintained.
Now, how to get the Session object in a plain class of SOAP WS. After looking into Axis API and surfing across the google I got some implementation to get HTTPServletRequest object.
Here's the implementation :
MessageContext context =
HttpServletRequest req = (HttpServletRequest)
HttpSession session = req.getSession();
What is MessageContext object?
I am sharing the info obtained from Axis2 API
MessageContext creates an object for every message, regardless of whether it is from the client or server, processed within Axis2. First, the transport-related information is fed into the object, followed by the object model. This message context is then passed into each handler that is registered to process this type of message. Since the Axis2 information processing model is stateless, the context hierarchy is the only place that can be used to store state. Additionally, if the context information is relevant to this particular message being processed, it should be stored within message context.
Refer: http://wso2.org/library/tutorials/understanding-axis2-context-hierarchy for more details on axis2-context.
- Shafeeq Mohammed