You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Davanum Srinivas <da...@gmail.com> on 2006/09/04 03:54:11 UTC

[Axis2] *PLEASE* discuss before committing (Re: svn commit: r439555 - in /webservices/axis2/trunk/java/modules: kernel/src/org/apache/axis2/ kernel/src/org/apache/axis2/deployment/util/ kernel/src/org/apache/axis2/receivers/ kernel/src/org/apache/axi

Saminda,

When you need to introduce changes such as AXIS2-1106 that break
backward compat. *PLEASE* discuss first on list. At least highlight
such a change in the commit message so that it can be caught earlier.

thanks,
dims

On 9/2/06, saminda@apache.org <sa...@apache.org> wrote:
> Author: saminda
> Date: Sat Sep  2 00:37:20 2006
> New Revision: 439555
>
> URL: http://svn.apache.org/viewvc?rev=439555&view=rev
> Log:
> 1. Added ServiceObjectSupplier interface, thus, if an .aar contains a
> "ServiceObjectSuppler" this will give the correct service object, at
> deployment time as well as when calling the MR that's been extenteded
> from Abstract Message Receiver
> 2. First implementation of this has been tried out with Spring
> 3. Added ServletConfig instance to AxisConfiguration.
>
> TODO // SchemaGeneration only takes a full qualified service object
> name. A Constructor should be added to take the Class, thus, the code
> will be efficient.
>
>
> Added:
>     webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/ServiceObjectSupplier.java
> Modified:
>     webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
>     webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
>     webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java
>     webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPConstants.java
>     webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringAppContextAwareObjectSupplier.java
>     webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringServletContextObjectSupplier.java
>
> Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/ServiceObjectSupplier.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/ServiceObjectSupplier.java?rev=439555&view=auto
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/ServiceObjectSupplier.java (added)
> +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/ServiceObjectSupplier.java Sat Sep  2 00:37:20 2006
> @@ -0,0 +1,26 @@
> +/*
> + * 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;
> +
> +import org.apache.axis2.description.AxisService;
> +/*
> + *
> + */
> +
> +public interface ServiceObjectSupplier {
> +    /* Deployment Engine uses this method */
> +    public Object getServiceObject(AxisService axisService) throws AxisFault;
> +}
>
> Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java (original)
> +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/util/Utils.java Sat Sep  2 00:37:20 2006
> @@ -31,6 +31,7 @@
>  import java.util.*;
>  import java.util.zip.ZipEntry;
>  import java.util.zip.ZipInputStream;
> +import java.lang.reflect.Method;
>
>  /*
>  * Copyright 2004,2005 The Apache Software Foundation.
> @@ -211,10 +212,37 @@
>       */
>      public static void fillAxisService(AxisService axisService,
>                                         AxisConfiguration axisConfig, ArrayList excludeOperations) throws Exception {
> +        String serviceClass;
>          Parameter implInfoParam = axisService.getParameter(Constants.SERVICE_CLASS);
> -        if (implInfoParam == null) {
> -            // Nothing to do.
> -            return;
> +        ClassLoader serviceClassLoader = axisService.getClassLoader();
> +
> +        if (implInfoParam != null) {
> +           serviceClass = (String) implInfoParam.getValue();
> +        } else {
> +            // if Service_Class is null, every AbstractMR will look for
> +            // ServiceObjectSupplier. This is user specific and may contain
> +            // other looks.
> +            implInfoParam = axisService.getParameter(Constants.SERVICE_OBJECT_SUPPLIER);
> +            if (implInfoParam != null) {
> +                Class serviceObjectMaker = Class.forName(((String)
> +                        implInfoParam.getValue()).trim(), true, serviceClassLoader);
> +
> +                // Find static getServiceObject() method, call it if there
> +                Method method = serviceObjectMaker.
> +                        getMethod("getServiceObject",
> +                                  new Class[] { AxisService.class });
> +                Object obj = null;
> +                if (method != null) {
> +                    obj =  method.invoke(serviceObjectMaker.newInstance(), new Object[] { axisService });
> +                }
> +                if (obj == null) {
> +                    throw new Exception("ServiceObjectSupplier implmentation Object could not be found");
> +                }
> +                serviceClass = obj.getClass().getName();
> +            } else {
> +                return;
> +            }
> +
>          }
>          // adding name spaces
>          Map map = new HashMap();
> @@ -223,8 +251,6 @@
>          map.put(Java2WSDLConstants.DEFAULT_SCHEMA_NAMESPACE_PREFIX,
>                  Java2WSDLConstants.URI_2001_SCHEMA_XSD);
>          axisService.setNameSpacesMap(map);
> -        String serviceClass = (String) implInfoParam.getValue();
> -        ClassLoader serviceClassLoader = axisService.getClassLoader();
>          SchemaGenerator schemaGenerator = new SchemaGenerator(serviceClassLoader,
>                  serviceClass.trim(), axisService.getSchematargetNamespace(),
>                  axisService.getSchematargetNamespacePrefix());
>
> Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java (original)
> +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/receivers/AbstractMessageReceiver.java Sat Sep  2 00:37:20 2006
> @@ -81,9 +81,9 @@
>                  // Find static getServiceObject() method, call it if there
>                  Method method = serviceObjectMaker.
>                          getMethod("getServiceObject",
> -                                  new Class[] { MessageContext.class });
> +                                  new Class[] { AxisService.class });
>                  if (method != null)
> -                    return method.invoke(null, new Object[] { msgContext });
> +                    return method.invoke(serviceObjectMaker.newInstance(), new Object[] { service });
>              }
>
>              Parameter implInfoParam = service.getParameter(Constants.SERVICE_CLASS);
>
> Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java (original)
> +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/AxisServlet.java Sat Sep  2 00:37:20 2006
> @@ -102,7 +102,6 @@
>          msgContext.setProperty(Constants.Configuration.TRANSPORT_IN_URL, req.getRequestURL().toString());
>          msgContext.setIncomingTransportName(Constants.TRANSPORT_HTTP);
>          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, req);
> -        msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT, servletConfig.getServletContext());
>
>          return msgContext;
>      }
> @@ -278,6 +277,11 @@
>
>              axisConfiguration = configContext.getAxisConfiguration();
>              config.getServletContext().setAttribute(CONFIGURATION_CONTEXT, configContext);
> +            // setting the ServletConfig to AxisConfiguration
> +            Parameter servletConfigParam = new Parameter();
> +            servletConfigParam.setName(HTTPConstants.HTTP_SERVLETCONFIG);
> +            servletConfigParam.setValue(this.servletConfig);
> +            axisConfiguration.addParameter(servletConfigParam);
>              ListenerManager listenerManager = new ListenerManager();
>              listenerManager.init(configContext);
>              TransportInDescription transportInDescription = new TransportInDescription(
> @@ -453,7 +457,6 @@
>          msgContext.setProperty(MessageContext.TRANSPORT_HEADERS, getHeaders(req));
>          msgContext.setServiceGroupContextId(UUIDGenerator.getUUID());
>          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, req);
> -        msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT, servletConfig.getServletContext());
>          return msgContext;
>      }
>
>
> Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPConstants.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPConstants.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPConstants.java (original)
> +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPConstants.java Sat Sep  2 00:37:20 2006
> @@ -155,8 +155,14 @@
>
>      /**
>       * Field MC_HTTP_SERVLETCONTEXT
> +     * @deprecated
>       */
>      public static String MC_HTTP_SERVLETCONTEXT = "transport.http.servletContext";
> +
> +    /**
> +     * transport.http.servletConfig
> +     */
> +    public static String HTTP_SERVLETCONFIG = "transport.http.servletConfig";
>
>      /**
>       * Field HEADER_USER_AGENT
>
> Modified: webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringAppContextAwareObjectSupplier.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringAppContextAwareObjectSupplier.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringAppContextAwareObjectSupplier.java (original)
> +++ webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringAppContextAwareObjectSupplier.java Sat Sep  2 00:37:20 2006
> @@ -17,45 +17,45 @@
>  package org.apache.axis2.extensions.spring.receivers;
>
>  import org.apache.axis2.AxisFault;
> -import org.apache.axis2.context.MessageContext;
> +import org.apache.axis2.ServiceObjectSupplier;
>  import org.apache.axis2.description.AxisService;
>  import org.apache.axis2.description.Parameter;
>  import org.apache.axis2.i18n.Messages;
> -
>  import org.springframework.context.ApplicationContext;
>
> -public class SpringAppContextAwareObjectSupplier {
> +public class SpringAppContextAwareObjectSupplier implements ServiceObjectSupplier {
> +
>      public static final String SERVICE_SPRING_BEANNAME = "SpringBeanName";
>
>      /**
> -     * Method getServiceObject that is Spring aware via Spring interface
> -     * ApplicationContextAware.
> +     * Method getServiceObject that is Spring aware via Spring interface
> +     * ApplicationContextAware.
>       *
> -     * @param msgContext
> +     * @param axisService
>       * @return Returns Object.
>       * @throws AxisFault
>       */
> -    public static Object getServiceObject(MessageContext msgContext) throws AxisFault {
> +
> +    public Object getServiceObject(AxisService axisService) throws AxisFault {
>          try {
> -            AxisService service =
> -                    msgContext.getOperationContext().getServiceContext().getAxisService();
>              // Name of spring aware bean to be injected, taken from services.xml
> -            // via 'SERVICE_SPRING_BEANNAME ' . The Bean and its properties are pre-configured
> +            // via 'SERVICE_SPRING_BEANNAME ' . The Bean and its properties are pre-configured
>              // as normally done in a spring type of way and subsequently loaded by Spring.
>              // Axis2 just assumes that the bean is configured and is in the classloader.
> -            Parameter implBeanParam = service.getParameter(SERVICE_SPRING_BEANNAME);
> +            Parameter implBeanParam = axisService.getParameter(SERVICE_SPRING_BEANNAME);
>              String beanName = ((String) implBeanParam.getValue()).trim();
>              if (beanName != null) {
>                  // ApplicationContextHolder implements Spring interface ApplicationContextAware
> -               ApplicationContext aCtx = ApplicationContextHolder.getContext();
> -               if (aCtx == null) {
> -                       throw new Exception("Axis2 Can't find Spring's ApplicationContext");
> -               } else if (aCtx.getBean(beanName) == null) {
> -                   throw new Exception("Axis2 Can't find Spring Bean: " + beanName);
> -               }
> +                ApplicationContext aCtx = ApplicationContextHolder.getContext();
> +                if (aCtx == null) {
> +                    throw new Exception("Axis2 Can't find Spring's ApplicationContext");
> +                } else if (aCtx.getBean(beanName) == null) {
> +                    throw new Exception("Axis2 Can't find Spring Bean: " + beanName);
> +                }
>                  return aCtx.getBean(beanName);
>              } else {
> -                throw new AxisFault(Messages.getMessage("paramIsNotSpecified", "SERVICE_SPRING_BEANNAME"));
> +                throw new AxisFault(
> +                        Messages.getMessage("paramIsNotSpecified", "SERVICE_SPRING_BEANNAME"));
>              }
>          } catch (Exception e) {
>              throw AxisFault.makeFault(e);
>
> Modified: webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringServletContextObjectSupplier.java
> URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringServletContextObjectSupplier.java?rev=439555&r1=439554&r2=439555&view=diff
> ==============================================================================
> --- webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringServletContextObjectSupplier.java (original)
> +++ webservices/axis2/trunk/java/modules/spring/src/org/apache/axis2/extensions/spring/receivers/SpringServletContextObjectSupplier.java Sat Sep  2 00:37:20 2006
> @@ -17,58 +17,59 @@
>  package org.apache.axis2.extensions.spring.receivers;
>
>  import org.apache.axis2.AxisFault;
> -import org.apache.axis2.context.MessageContext;
> +import org.apache.axis2.ServiceObjectSupplier;
>  import org.apache.axis2.description.AxisService;
>  import org.apache.axis2.description.Parameter;
>  import org.apache.axis2.i18n.Messages;
> -import org.apache.axis2.Constants;
>  import org.apache.axis2.transport.http.HTTPConstants;
> -
> -import javax.servlet.ServletContext;
> -
>  import org.springframework.context.ApplicationContext;
>  import org.springframework.web.context.support.WebApplicationContextUtils;
>
> -public class SpringServletContextObjectSupplier {
> +import javax.servlet.ServletConfig;
> +import javax.servlet.ServletContext;
> +
> +public class SpringServletContextObjectSupplier implements ServiceObjectSupplier {
>      public static final String SERVICE_SPRING_BEANNAME = "SpringBeanName";
>
>      /**
> -     * Method getServiceObject that is Spring aware via ServletContext.
> +     * Method getServiceObject that is Spring aware via ServletContext.
>       *
> -     * @param msgContext
> +     * @param axisService
>       * @return Returns Object.
>       * @throws AxisFault
>       */
> -    public static Object getServiceObject(MessageContext msgContext) throws AxisFault {
> +    public Object getServiceObject(AxisService axisService) throws AxisFault {
>          try {
> -            AxisService service =
> -                    msgContext.getOperationContext().getServiceContext().getAxisService();
>              // Name of spring aware bean to be injected, taken from services.xml
> -            // via 'SERVICE_SPRING_BEANNAME ' . The Bean and its properties are pre-configured
> +            // via 'SERVICE_SPRING_BEANNAME ' . The Bean and its properties are pre-configured
>              // as normally done in a spring type of way and subsequently loaded by Spring.
>              // Axis2 just assumes that the bean is configured and is in the classloader.
> -            Parameter implBeanParam = service.getParameter(SERVICE_SPRING_BEANNAME);
> +            Parameter implBeanParam = axisService.getParameter(SERVICE_SPRING_BEANNAME);
>              String beanName = ((String) implBeanParam.getValue()).trim();
>              if (beanName != null) {
> -                ServletContext servletContext = (ServletContext) msgContext.getOptions().
> -                   getProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT);
> -               if (servletContext == null) {
> -                       throw new Exception("Axis2 Can't find ServletContext");
> +                ServletConfig servletConfig = (ServletConfig) axisService.getAxisConfiguration()
> +                        .getParameter(HTTPConstants.HTTP_SERVLETCONFIG);
> +                if (servletConfig == null) {
> +                    throw new Exception("Axis2 Can't find ServletConfig");
> +                }
> +                ServletContext servletContext = servletConfig.getServletContext();
> +
> +                ApplicationContext aCtx =
> +                        WebApplicationContextUtils.getWebApplicationContext(servletContext);
> +                if (aCtx == null) {
> +                    throw new Exception("Axis2 Can't find Spring's ApplicationContext");
> +                } else if (aCtx.getBean(beanName) == null) {
> +                    throw new Exception("Axis2 Can't find Spring Bean: " + beanName);
>                  }
> -                ApplicationContext aCtx =
> -                    WebApplicationContextUtils.getWebApplicationContext(servletContext);
> -               if (aCtx == null) {
> -                       throw new Exception("Axis2 Can't find Spring's ApplicationContext");
> -               } else if (aCtx.getBean(beanName) == null) {
> -                   throw new Exception("Axis2 Can't find Spring Bean: " + beanName);
> -               }
>                  return aCtx.getBean(beanName);
>              } else {
> -                throw new AxisFault(Messages.getMessage("paramIsNotSpecified", "SERVICE_SPRING_BEANNAME"));
> +                throw new AxisFault(
> +                        Messages.getMessage("paramIsNotSpecified", "SERVICE_SPRING_BEANNAME"));
>              }
>          } catch (Exception e) {
>              throw AxisFault.makeFault(e);
>          }
> +
>      }
>  }
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-cvs-help@ws.apache.org
>
>


-- 
Davanum Srinivas : http://www.wso2.net (Oxygen for Web Service Developers)

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Re: [Axis2] *PLEASE* discuss before committing (Re: svn commit: r439555 - in /webservices/axis2/trunk/java/modules: kernel/src/org/apache/axis2/ kernel/src/org/apache/axis2/deployment/util/ kernel/src/org/apache/axis2/receivers/ kernel/src/org/apache/axi

Posted by Sanjiva Weerawarana <sa...@opensource.lk>.
On Sun, 2006-09-03 at 21:54 -0400, Davanum Srinivas wrote:
> >
> > URL: http://svn.apache.org/viewvc?rev=439555&view=rev
> > Log:
> > 1. Added ServiceObjectSupplier interface, thus, if an .aar contains a
> > "ServiceObjectSuppler" this will give the correct service object, at
> > deployment time as well as when calling the MR that's been extenteded
> > from Abstract Message Receiver

I missed this commit too - Saminda can you please explain what this
interface is for? Anything like an interface introduction *must* be
discussed on the list as that has impact on lots of stuff, not just the
immediate code.

> > 2. First implementation of this has been tried out with Spring
> > 3. Added ServletConfig instance to AxisConfiguration.
> >
> > TODO // SchemaGeneration only takes a full qualified service object
> > name. A Constructor should be added to take the Class, thus, the code
> > will be efficient.

I have no idea what that means; can you please explain?

Sanjiva.



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org