QSMethodHandler.javaAPI DocApache Axis 1.46151Sat Apr 22 18:57:28 BST 2006org.apache.axis.transport.http


public class QSMethodHandler extends AbstractQueryStringHandler
The QSMethodHandler class is a handler which executes a given method from an an AXIS service's WSDL definition when the query string "method" is encountered in an AXIS servlet invocation.
Curtiss Howard (code mostly from AxisServlet class)
Doug Davis (
Steve Loughran

Fields Summary
Constructors Summary
Methods Summary
public voidinvoke(org.apache.axis.MessageContext msgContext)
Performs the action associated with this particular query string handler.

msgContext a MessageContext object containing message context information for this query string handler.
AxisFault if an error occurs.

        // Obtain objects relevant to the task at hand from the provided
        // MessageContext's bag.

        AxisServer engine = (AxisServer) msgContext.getProperty
        PrintWriter writer = (PrintWriter) msgContext.getProperty
        HttpServletRequest request = (HttpServletRequest)
                msgContext.getProperty (HTTPConstants.MC_HTTP_SERVLETREQUEST);
        HttpServletResponse response = (HttpServletResponse)
                msgContext.getProperty (HTTPConstants.MC_HTTP_SERVLETRESPONSE);

        String method = null;
        String args = "";
        Enumeration e = request.getParameterNames();

        while (e.hasMoreElements()) {
            String param = (String) e.nextElement();
            if (param.equalsIgnoreCase ("method")) {
                method = request.getParameter (param);

            else {
                args += "<" + param + ">" + request.getParameter (param) +
                        "</" + param + ">";

        if (method == null) {
            response.setContentType ("text/html");
            response.setStatus (HttpServletResponse.SC_BAD_REQUEST);

            writer.println ("<h2>" + Messages.getMessage ("error00") +
                    ":  " + Messages.getMessage ("invokeGet00") + "</h2>");
            writer.println ("<p>" + Messages.getMessage ("noMethod01") +

        else {
            invokeEndpointFromGet (msgContext, response, writer, method, args);
private voidinvokeEndpointFromGet(org.apache.axis.MessageContext msgContext, javax.servlet.http.HttpServletResponse response, writer, java.lang.String method, java.lang.String args)
invoke an endpoint from a get request by building an XML request and handing it down. If anything goes wrong, we generate an XML formatted axis fault

msgContext current message
response to return data
writer output stream
method method to invoke (may be null)
args argument list in XML form
AxisFault iff something goes wrong when turning the response message into a SOAP string.

        String body = "<" + method + ">" + args + "</" + method + ">";
        String msgtxt = "<SOAP-ENV:Envelope" +
                " xmlns:SOAP-ENV=\"\">" +
                "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" +
        ByteArrayInputStream istream =
                new ByteArrayInputStream (msgtxt.getBytes());
        Message responseMsg = null;

        try {
            AxisServer engine = (AxisServer) msgContext.getProperty
            Message msg = new Message (istream, false);

            msgContext.setRequestMessage (msg);
            engine.invoke (msgContext);

            responseMsg = msgContext.getResponseMessage();

            //turn off caching for GET requests

            response.setHeader ("Cache-Control", "no-cache");
            response.setHeader ("Pragma", "no-cache");

            if (responseMsg == null) {
                //tell everyone that something is wrong

                throw new Exception (Messages.getMessage ("noResponse01"));


        catch (AxisFault fault) {
            processAxisFault (fault);

            configureResponseFromAxisFault (response, fault);

            if (responseMsg == null) {
                responseMsg = new Message (fault);

        catch (Exception e) {
            response.setStatus (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
            responseMsg = convertExceptionToAxisFault (e, responseMsg);

        //this call could throw an AxisFault. We delegate it up, because
        //if we cant write the message there is not a lot we can do in pure SOAP terms.

        response.setContentType ("text/xml");

        writer.println (responseMsg.getSOAPPartAsString());