Alex,

Could you please open a JIRA issue? BTW, congrats on the PXE acquisition :)

-- dims

On 12/19/05, Alex Boisvert <[EMAIL PROTECTED]> wrote:
>
> Hi (and hello to everybody I met at JavaOne!)
>
> I was wondering if the current maintainer of AxisServlet could review
> the following changes to AxisServlet.   The refactoring is aimed at
> improving the extensibility of AxisServlet by allowing the override of
> initConfigContext().
>
> The use-case I am trying to support is to obtain a ConfigurationContext
> from JNDI (instead of directly loading from file system) to share
> ConfigurationContext between loosely-coupled components in different
> classloading hierarchies and/or where the configuration repository is
> not deployed in the servlet's /WEB-INF directory.
>
> I'm open to other approaches if anyone has better ideas on how to
> abstract the initialization of the ConfigurationContext, such as
> enhancing the ConfigurationContextFactory.  I was just going for the
> simplest solution to support this kind of extensibility.
>
> cheers,
> alex
>
>
>
> /*
> * Copyright 2004,2005 The Apache Software Foundation.
> *
> * Licensed under the Apache License, Version 2.0 (the "License");
> * you may not use this file except in compliance with the License.
> * You may obtain a copy of the License at
> *
> *      http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
>
>
> package org.apache.axis2.transport.http;
>
> import org.apache.axis2.AxisFault;
> import org.apache.axis2.Constants;
> import org.apache.axis2.context.ConfigurationContext;
> import org.apache.axis2.context.ConfigurationContextFactory;
> import org.apache.axis2.context.MessageContext;
> import org.apache.axis2.context.SessionContext;
> import org.apache.axis2.engine.AxisEngine;
>
> import javax.servlet.ServletConfig;
> import javax.servlet.ServletContext;
> import javax.servlet.ServletException;
> import javax.servlet.http.HttpServlet;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.xml.namespace.QName;
> import java.io.File;
> import java.io.IOException;
> import java.io.OutputStream;
> import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.Map;
>
> /**
>  * Class AxisServlet
>  */
> public class AxisServlet extends HttpServlet {
>     private static final String CONFIGURATION_CONTEXT = 
> "CONFIGURATION_CONTEXT";
>     public static final String SESSION_ID = "SessionId";
>     private ConfigurationContext configContext;
>     private ListingAgent lister;
>
>     private MessageContext createAndSetInitialParamsToMsgCtxt(Object 
> sessionContext,
>                                                               MessageContext 
> msgContext, HttpServletResponse httpServletResponse,
>                                                               
> HttpServletRequest httpServletRequest)
>             throws AxisFault {
>         msgContext =
>                 new MessageContext(configContext, (SessionContext) 
> sessionContext,
>                         configContext.getAxisConfiguration()
>                                 .getTransportIn(new QName(Constants
>                                 .TRANSPORT_HTTP)), 
> configContext.getAxisConfiguration()
>                         .getTransportOut(new 
> QName(Constants.TRANSPORT_HTTP)));
>         msgContext.setProperty(Constants.OUT_TRANSPORT_INFO,
>                 new ServletBasedOutTransportInfo(httpServletResponse));
>         msgContext.setProperty(MessageContext.TRANSPORT_HEADERS,
>                 getTransportHeaders(httpServletRequest));
>         msgContext.setProperty(SESSION_ID, 
> httpServletRequest.getSession().getId());
>
>         return msgContext;
>     }
>
>     public void destroy() {
>         super.destroy();
>     }
>
>     /**
>      * Method doGet
>      *
>      * @param httpServletRequest
>      * @param httpServletResponse
>      * @throws ServletException
>      * @throws IOException
>      */
>     protected void doGet(HttpServletRequest httpServletRequest,
>                          HttpServletResponse httpServletResponse)
>             throws ServletException, IOException {
>         MessageContext msgContext = null;
>         OutputStream out = null;
>
>         try {
>             Object sessionContext = getSessionContext(httpServletRequest);
>             HashMap map = getHTTPParameters(httpServletRequest);
>
>             msgContext = createAndSetInitialParamsToMsgCtxt(sessionContext, 
> msgContext,
>                     httpServletResponse, httpServletRequest);
>             msgContext.setDoingREST(true);
>             msgContext.setServerSide(true);
>             out = httpServletResponse.getOutputStream();
>
>             boolean processed = 
> HTTPTransportUtils.processHTTPGetRequest(msgContext,
>                     httpServletRequest.getInputStream(), out,
>                     httpServletRequest.getContentType(),
>                     
> httpServletRequest.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
>                     httpServletRequest.getRequestURL().toString(), 
> configContext,
>                     map);
>
>             if (!processed) {
>                 lister.handle(httpServletRequest, httpServletResponse, out);
>             }
>         } catch (AxisFault e) {
>             if (msgContext != null) {
>                 handleFault(msgContext, out, e);
>             } else {
>                 throw new ServletException(e);
>             }
>         } catch (Exception e) {
>             throw new ServletException(e);
>         }
>     }
>
>     /*
>      * (non-Javadoc)
>      * @see 
> javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, 
> javax.servlet.http.HttpServletResponse)
>      */
>
>     /**
>      * Method doPost
>      *
>      * @param req
>      * @param res
>      * @throws ServletException
>      * @throws IOException
>      */
>     protected void doPost(HttpServletRequest req, HttpServletResponse res)
>             throws ServletException, IOException {
>         MessageContext msgContext = null;
>         OutputStream out = null;
>
>         try {
>             Object sessionContext = getSessionContext(req);
>
>             msgContext = createAndSetInitialParamsToMsgCtxt(sessionContext, 
> msgContext, res, req);
>
>             // adding ServletContext into msgContext;
>             msgContext.setProperty(Constants.SERVLET_CONTEXT, sessionContext);
>             out = res.getOutputStream();
>             HTTPTransportUtils.processHTTPPostRequest(msgContext, 
> req.getInputStream(), out,
>                     req.getContentType(), 
> req.getHeader(HTTPConstants.HEADER_SOAP_ACTION),
>                     req.getRequestURL().toString());
>
>             Object contextWritten =
>                     
> msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);
>
>             res.setContentType("text/xml; charset="
>                     + 
> msgContext.getProperty(MessageContext.CHARACTER_SET_ENCODING));
>
>             if ((contextWritten == null) || 
> !Constants.VALUE_TRUE.equals(contextWritten)) {
>                 res.setStatus(HttpServletResponse.SC_ACCEPTED);
>             }
>         } catch (AxisFault e) {
>             if (msgContext != null) {
>                 res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
>                 handleFault(msgContext, out, e);
>             } else {
>                 throw new ServletException(e);
>             }
>         }
>     }
>
>     private void handleFault(MessageContext msgContext, OutputStream out, 
> AxisFault e)
>             throws AxisFault {
>         msgContext.setProperty(MessageContext.TRANSPORT_OUT, out);
>
>         AxisEngine engine = new AxisEngine(configContext);
>         MessageContext faultContext = 
> engine.createFaultMessageContext(msgContext, e);
>
>         engine.sendFault(faultContext);
>     }
>
>     /**
>      * Method init
>      *
>      * @param config
>      * @throws ServletException
>      */
>     public void init(ServletConfig config) throws ServletException {
>         try {
>             configContext = initConfigContext(config);
>             lister = new ListingAgent(configContext);
>             context.setAttribute(CONFIGURATION_CONTEXT, configContext);
>         } catch (Exception e) {
>             throw new ServletException(e);
>         }
>     }
>
>     /**
>      * Initialize the Axis configuration context
>      *
>      * @param config Servlet configuration
>      * @throws ServletException
>      */
>     protected ConfigurationContext initConfigContext(ServletConfig config) 
> throws ServletException {
>         try {
>             ServletContext context = config.getServletContext();
>             String repoDir = context.getRealPath("/WEB-INF");
>             ConfigurationContextFactory erfac = new 
> ConfigurationContextFactory();
>             ConfigurationContext configContext = 
> erfac.buildConfigurationContext(repoDir);
>             configContext.setProperty(Constants.CONTAINER_MANAGED, 
> Constants.VALUE_TRUE);
>             configContext.setRootDir(new 
> File(context.getRealPath("/WEB-INF")));
>             return configContext;
>         } catch (Exception e) {
>             throw new ServletException(e);
>         }
>     }
>
>     private HashMap getHTTPParameters(HttpServletRequest httpServletRequest) {
>         HashMap map = new HashMap();
>         Enumeration enu = httpServletRequest.getParameterNames();
>
>         while (enu.hasMoreElements()) {
>             String name = (String) enu.nextElement();
>             String value = httpServletRequest.getParameter(name);
>
>             map.put(name, value);
>         }
>
>         return map;
>     }
>
>     private Object getSessionContext(HttpServletRequest httpServletRequest) {
>         Object sessionContext =
>                 
> httpServletRequest.getSession().getAttribute(Constants.SESSION_CONTEXT_PROPERTY);
>
>         if (sessionContext == null) {
>             sessionContext = new SessionContext(null);
>             
> httpServletRequest.getSession().setAttribute(Constants.SESSION_CONTEXT_PROPERTY,
>                     sessionContext);
>         }
>
>         return sessionContext;
>     }
>
>     private Map getTransportHeaders(HttpServletRequest req) {
>         HashMap headerMap = new HashMap();
>         Enumeration headerNames = req.getHeaderNames();
>
>         while (headerNames.hasMoreElements()) {
>             String key = (String) headerNames.nextElement();
>             String value = req.getHeader(key);
>
>             headerMap.put(key, value);
>         }
>
>         return headerMap;
>     }
> }
>
>
> C:\svn\axis2\java\modules\core>svn diff
> Index: src/org/apache/axis2/transport/http/AxisServlet.java
> ===================================================================
> --- src/org/apache/axis2/transport/http/AxisServlet.java        (revision 
> 357874)
> +++ src/org/apache/axis2/transport/http/AxisServlet.java        (working copy)
> @@ -183,21 +183,34 @@
>       */
>      public void init(ServletConfig config) throws ServletException {
>          try {
> +            configContext = initConfigContext(config);
> +            lister = new ListingAgent(configContext);
> +            context.setAttribute(CONFIGURATION_CONTEXT, configContext);
> +        } catch (Exception e) {
> +            throw new ServletException(e);
> +        }
> +    }
> +
> +    /**
> +     * Initialize the Axis configuration context
> +     *
> +     * @param config Servlet configuration
> +     * @throws ServletException
> +     */
> +    protected ConfigurationContext initConfigContext(ServletConfig config) 
> throws ServletException {
> +        try {
>              ServletContext context = config.getServletContext();
>              String repoDir = context.getRealPath("/WEB-INF");
>              ConfigurationContextFactory erfac = new 
> ConfigurationContextFactory();
> -
> -            configContext = erfac.buildConfigurationContext(repoDir);
> +            ConfigurationContext configContext = 
> erfac.buildConfigurationContext(repoDir);
>              configContext.setProperty(Constants.CONTAINER_MANAGED, 
> Constants.VALUE_TRUE);
>              configContext.setRootDir(new 
> File(context.getRealPath("/WEB-INF")));
> -            lister = new ListingAgent(configContext);
> -            context.setAttribute(CONFIGURATION_CONTEXT, configContext);
> -
> +            return configContext;
>          } catch (Exception e) {
>              throw new ServletException(e);
>          }
> -    }
> -
> +    }
> +
>      private HashMap getHTTPParameters(HttpServletRequest httpServletRequest) 
> {
>          HashMap map = new HashMap();
>          Enumeration enu = httpServletRequest.getParameterNames();
>
>
>


--
Davanum Srinivas : http://wso2.com/blogs/

Reply via email to