⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axisservlet.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                                              HEADER_CONTENT_LOCATION));            // Transfer HTTP headers to MIME headers for request message.            MimeHeaders requestMimeHeaders = requestMsg.getMimeHeaders();            for (Enumeration e = req.getHeaderNames(); e.hasMoreElements(); ) {                String headerName = (String) e.nextElement();                for (Enumeration f = req.getHeaders(headerName);                                     f.hasMoreElements(); ) {                    String headerValue = (String) f.nextElement();                    requestMimeHeaders.addHeader(headerName, headerValue);                }            }            if (isDebug) {                log.debug("Request Message:" + requestMsg);                /* Set the request(incoming) message field in the context */                /**********************************************************/            }            msgContext.setRequestMessage(requestMsg);            String url = HttpUtils.getRequestURL(req).toString();            msgContext.setProperty(MessageContext.TRANS_URL, url);            // put character encoding of request to message context            // in order to reuse it during the whole process.            String requestEncoding;            try {                requestEncoding = (String) requestMsg.getProperty(SOAPMessage.                        CHARACTER_SET_ENCODING);                if (requestEncoding != null) {                    msgContext.setProperty(SOAPMessage.CHARACTER_SET_ENCODING,                                           requestEncoding);                }            } catch (SOAPException e1) {            }            try {                /**                 * Save the SOAPAction header in the MessageContext bag.                 * This will be used to tell the Axis Engine which service                 * is being invoked.  This will save us the trouble of                 * having to parse the Request message - although we will                 * need to double-check later on that the SOAPAction header                 * does in fact match the URI in the body.                 */                // (is this last stmt true??? (I don't think so - Glen))                /********************************************************/                soapAction = getSoapAction(req);                if (soapAction != null) {                    msgContext.setUseSOAPAction(true);                    msgContext.setSOAPActionURI(soapAction);                }                // Create a Session wrapper for the HTTP session.                // These can/should be pooled at some point.                // (Sam is Watching! :-)                msgContext.setSession(new AxisHttpSession(req));                if (tlog.isDebugEnabled()) {                    t1 = System.currentTimeMillis();                }                /* Invoke the Axis engine... */                /*****************************/                if (isDebug) {                    log.debug("Invoking Axis Engine.");                    //here we run the message by the engine                }                engine.invoke(msgContext);                if (isDebug) {                    log.debug("Return from Axis Engine.");                }                if (tlog.isDebugEnabled()) {                    t2 = System.currentTimeMillis();                }                responseMsg = msgContext.getResponseMessage();                // We used to throw exceptions on null response messages.                // They are actually OK in certain situations (asynchronous                // services), so fall through here and return an ACCEPTED                // status code below.  Might want to install a configurable                // error check for this later.            } catch (AxisFault fault) {                //log and sanitize                processAxisFault(fault);                configureResponseFromAxisFault(res, fault);                responseMsg = msgContext.getResponseMessage();                if (responseMsg == null) {                    responseMsg = new Message(fault);                    ((org.apache.axis.SOAPPart) responseMsg.getSOAPPart()).                            getMessage().setMessageContext(msgContext);                }            } catch (Exception e) {                //other exceptions are internal trouble                responseMsg = msgContext.getResponseMessage();                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);                responseMsg = convertExceptionToAxisFault(e, responseMsg);                ((org.apache.axis.SOAPPart) responseMsg.getSOAPPart()).                        getMessage().setMessageContext(msgContext);            } catch (Throwable t) {                logException(t);                //other exceptions are internal trouble                responseMsg = msgContext.getResponseMessage();                res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);                responseMsg = new Message(new AxisFault(t.toString(),t));                ((org.apache.axis.SOAPPart) responseMsg.getSOAPPart()).                        getMessage().setMessageContext(msgContext);            }        } catch (AxisFault fault) {            processAxisFault(fault);            configureResponseFromAxisFault(res, fault);            responseMsg = msgContext.getResponseMessage();            if (responseMsg == null) {                responseMsg = new Message(fault);                ((org.apache.axis.SOAPPart) responseMsg.getSOAPPart()).                        getMessage().setMessageContext(msgContext);            }        }        if (tlog.isDebugEnabled()) {            t3 = System.currentTimeMillis();        }        /* Send response back along the wire...  */        /***********************************/        if (responseMsg != null) {            // Transfer MIME headers to HTTP headers for response message.            MimeHeaders responseMimeHeaders = responseMsg.getMimeHeaders();            for (Iterator i = responseMimeHeaders.getAllHeaders(); i.hasNext(); ) {                MimeHeader responseMimeHeader = (MimeHeader) i.next();                res.addHeader(responseMimeHeader.getName(),                              responseMimeHeader.getValue());            }            // synchronize the character encoding of request and response            String responseEncoding = (String) msgContext.getProperty(                    SOAPMessage.CHARACTER_SET_ENCODING);            if (responseEncoding != null) {                try {                    responseMsg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING,                                            responseEncoding);                } catch (SOAPException e) {                }            }            //determine content type from message response            contentType = responseMsg.getContentType(msgContext.                    getSOAPConstants());            sendResponse(contentType, res, responseMsg);        } else {            // No content, so just indicate accepted            res.setStatus(202);        }                if (isDebug) {            log.debug("Response sent.");            log.debug("Exit: doPost()");        }        if (tlog.isDebugEnabled()) {            t4 = System.currentTimeMillis();            tlog.debug("axisServlet.doPost: " + soapAction +                       " pre=" + (t1 - t0) +                       " invoke=" + (t2 - t1) +                       " post=" + (t3 - t2) +                       " send=" + (t4 - t3) +                       " " + msgContext.getTargetService() + "." +                       ((msgContext.getOperation() == null) ?                        "" : msgContext.getOperation().getName()));        }    }    /**     * Configure the servlet response status code and maybe other headers     * from the fault info.     * @param response response to configure     * @param fault what went wrong     */    private void configureResponseFromAxisFault(HttpServletResponse response,                                                AxisFault fault) {        // then get the status code        // It's been suggested that a lack of SOAPAction        // should produce some other error code (in the 400s)...        int status = getHttpServletResponseStatus(fault);        if (status == HttpServletResponse.SC_UNAUTHORIZED) {            // unauth access results in authentication request            // TODO: less generic realm choice?            response.setHeader("WWW-Authenticate", "Basic realm=\"AXIS\"");        }        response.setStatus(status);    }    /**     * turn any Exception into an AxisFault, log it, set the response     * status code according to what the specifications say and     * return a response message for posting. This will be the response     * message passed in if non-null; one generated from the fault otherwise.     *     * @param exception what went wrong     * @param responseMsg what response we have (if any)     * @return a response message to send to the user     */    private Message convertExceptionToAxisFault(Exception exception,                                                Message responseMsg) {        logException(exception);        if (responseMsg == null) {            AxisFault fault = AxisFault.makeFault(exception);            processAxisFault(fault);            responseMsg = new Message(fault);        }        return responseMsg;    }    /**     * Extract information from AxisFault and map it to a HTTP Status code.     *     * @param af Axis Fault     * @return HTTP Status code.     */    protected int getHttpServletResponseStatus(AxisFault af) {        // TODO: Should really be doing this with explicit AxisFault        // subclasses... --Glen        return af.getFaultCode().getLocalPart().startsWith("Server.Unauth")                ? HttpServletResponse.SC_UNAUTHORIZED                : HttpServletResponse.SC_INTERNAL_SERVER_ERROR;        // This will raise a 401 for both        // "Unauthenticated" & "Unauthorized"...    }    /**     * write a message to the response, set appropriate headers for content     * type..etc.     * @param res   response     * @param responseMsg message to write     * @throws AxisFault     * @throws IOException if the response stream can not be written to     */    private void sendResponse(String contentType,                              HttpServletResponse res,                              Message responseMsg) throws AxisFault,            IOException {        if (responseMsg == null) {            res.setStatus(HttpServletResponse.SC_NO_CONTENT);            if (isDebug) {                log.debug("NO AXIS MESSAGE TO RETURN!");                //String resp = Messages.getMessage("noData00");                //res.setContentLength((int) resp.getBytes().length);                //res.getWriter().print(resp);            }        } else {            if (isDebug) {                log.debug("Returned Content-Type:" +                          contentType);                // log.debug("Returned Content-Length:" +                //          responseMsg.getContentLength());            }            try {                res.setContentType(contentType);                /* My understand of Content-Length                 * HTTP 1.0                 *   -Required for requests, but optional for responses.                 * HTTP 1.1                 *  - Either Content-Length or HTTP Chunking is required.                 *   Most servlet engines will do chunking if content-length is not specified.                 *                 *                 */                //if(clientVersion == HTTPConstants.HEADER_PROTOCOL_V10) //do chunking if necessary.                //     res.setContentLength(responseMsg.getContentLength());                responseMsg.writeTo(res.getOutputStream());            } catch (SOAPException e) {                logException(e);            }        }        if (!res.isCommitted()) {            res.flushBuffer(); // Force it right now.        }    }    /**     * Place the Request message in the MessagContext object - notice     * that we just leave it as a 'ServletRequest' object and let the     * Message processing routine convert it - we don't do it since we     * don't know how it's going to be used - perhaps it might not     * even need to be parsed.     * @return a message context     */    private MessageContext createMessageContext(AxisEngine engine,                                                HttpServletRequest req,                                                HttpServletResponse res) {        MessageContext msgContext = new MessageContext(engine);        String requestPath = getRequestPath(req);        if (isDebug) {            log.debug("MessageContext:" + msgContext);            log.debug("HEADER_CONTENT_TYPE:" +                      req.getHeader(HTTPConstants.HEADER_CONTENT_TYPE));            log.debug("HEADER_CONTENT_LOCATION:" +                      req.getHeader(HTTPConstants.HEADER_CONTENT_LOCATION));            log.debug("Constants.MC_HOME_DIR:" + String.valueOf(getHomeDir()));            log.debug("Constants.MC_RELATIVE_PATH:" + requestPath);            log.debug("HTTPConstants.MC_HTTP_SERVLETLOCATION:" +                      String.valueOf(getWebInfPath()));            log.debug("HTTPConstants.MC_HTTP_SERVLETPATHINFO:" +                      req.getPathInfo());            log.debug("HTTPConstants.HEADER_AUTHORIZATION:" +                      req.getHeader(HTTPConstants.HEADER_AUTHORIZATION));            log.debug("Constants.MC_REMOTE_ADDR:" + req.getRemoteAddr());            log.debug("configPath:" + String.valueOf(getWebInfPath()));        }        /* Set the Transport */        /*********************/        msgContext.setTransportName(transportName);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -