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 di...@apache.org on 2002/10/25 19:18:35 UTC

cvs commit: xml-axis/java/src/org/apache/axis/deployment/wsdd WSDDConstants.java WSDDProvider.java

dims        2002/10/25 10:18:35

  Modified:    java/src/org/apache/axis/deployment/wsdd/providers
                        WSDDBsfProvider.java WSDDComProvider.java
                        WSDDHandlerProvider.java WSDDJavaEJBProvider.java
                        WSDDJavaMsgProvider.java WSDDJavaRPCProvider.java
               java/src/org/apache/axis/deployment/wsdd WSDDConstants.java
                        WSDDProvider.java
  Log:
  Patch for Bug 13857 - There is no standard way to plug in providers
  from vishy@borland.com (Vishy Kasar)
  
  Revision  Changes    Path
  1.20      +6 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDBsfProvider.java
  
  Index: WSDDBsfProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDBsfProvider.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- WSDDBsfProvider.java	26 Jun 2002 18:19:08 -0000	1.19
  +++ WSDDBsfProvider.java	25 Oct 2002 17:18:34 -0000	1.20
  @@ -60,6 +60,8 @@
   import org.apache.axis.deployment.wsdd.WSDDService;
   import org.apache.axis.encoding.SerializationContext;
   import org.apache.axis.providers.BSFProvider;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   import java.io.IOException;
   
  @@ -70,6 +72,10 @@
   public class WSDDBsfProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_BSF;
  +    }
  +
       public Handler newProviderInstance(WSDDService service,
                                          EngineConfiguration registry)
           throws Exception
  
  
  
  1.20      +6 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDComProvider.java
  
  Index: WSDDComProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDComProvider.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- WSDDComProvider.java	26 Jun 2002 18:19:08 -0000	1.19
  +++ WSDDComProvider.java	25 Oct 2002 17:18:34 -0000	1.20
  @@ -61,6 +61,8 @@
   import org.apache.axis.providers.BasicProvider;
   import org.apache.axis.providers.ComProvider;
   import org.apache.axis.utils.ClassUtils;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   
   /**
  @@ -69,6 +71,10 @@
   public class WSDDComProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_COM;
  +    }
  +
       public Handler newProviderInstance(WSDDService service,
                                          EngineConfiguration registry)
           throws Exception
  
  
  
  1.11      +5 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDHandlerProvider.java
  
  Index: WSDDHandlerProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDHandlerProvider.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- WSDDHandlerProvider.java	18 Sep 2002 16:10:44 -0000	1.10
  +++ WSDDHandlerProvider.java	25 Oct 2002 17:18:34 -0000	1.11
  @@ -62,6 +62,7 @@
   import org.apache.axis.utils.ClassUtils;
   import org.apache.axis.utils.JavaUtils;
   import org.apache.axis.utils.Messages;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   /**
    * This is a simple provider for using Handler-based services which don't
  @@ -72,6 +73,10 @@
   public class WSDDHandlerProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_HANDLER;
  +    }
  +
       public Handler newProviderInstance(WSDDService service,
                                          EngineConfiguration registry)
           throws Exception
  
  
  
  1.4       +4 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaEJBProvider.java
  
  Index: WSDDJavaEJBProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaEJBProvider.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WSDDJavaEJBProvider.java	26 Jun 2002 18:19:08 -0000	1.3
  +++ WSDDJavaEJBProvider.java	25 Oct 2002 17:18:34 -0000	1.4
  @@ -58,6 +58,7 @@
   import org.apache.axis.Handler;
   import org.apache.axis.deployment.wsdd.WSDDProvider;
   import org.apache.axis.deployment.wsdd.WSDDService;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   
   /**
  @@ -68,6 +69,9 @@
   public class WSDDJavaEJBProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_EJB;
  +    }
       /**
        *
        */
  
  
  
  1.4       +4 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaMsgProvider.java
  
  Index: WSDDJavaMsgProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaMsgProvider.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WSDDJavaMsgProvider.java	26 Jun 2002 18:19:08 -0000	1.3
  +++ WSDDJavaMsgProvider.java	25 Oct 2002 17:18:34 -0000	1.4
  @@ -58,6 +58,7 @@
   import org.apache.axis.Handler;
   import org.apache.axis.deployment.wsdd.WSDDProvider;
   import org.apache.axis.deployment.wsdd.WSDDService;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   
   /**
  @@ -66,6 +67,9 @@
   public class WSDDJavaMsgProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_MSG;
  +    }
       /**
        *
        */
  
  
  
  1.4       +4 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaRPCProvider.java
  
  Index: WSDDJavaRPCProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/providers/WSDDJavaRPCProvider.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- WSDDJavaRPCProvider.java	26 Jun 2002 18:19:08 -0000	1.3
  +++ WSDDJavaRPCProvider.java	25 Oct 2002 17:18:34 -0000	1.4
  @@ -58,6 +58,7 @@
   import org.apache.axis.Handler;
   import org.apache.axis.deployment.wsdd.WSDDProvider;
   import org.apache.axis.deployment.wsdd.WSDDService;
  +import org.apache.axis.deployment.wsdd.WSDDConstants;
   
   
   /**
  @@ -66,6 +67,9 @@
   public class WSDDJavaRPCProvider
       extends WSDDProvider
   {
  +    public String getName() {
  +        return WSDDConstants.PROVIDER_RPC;
  +    }
       /**
        *
        */
  
  
  
  1.26      +2 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDConstants.java
  
  Index: WSDDConstants.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDConstants.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- WSDDConstants.java	9 Oct 2002 19:06:29 -0000	1.25
  +++ WSDDConstants.java	25 Oct 2002 17:18:35 -0000	1.26
  @@ -103,6 +103,8 @@
       public static final String PROVIDER_MSG = "MSG";
       public static final String PROVIDER_HANDLER = "Handler";
       public static final String PROVIDER_EJB = "EJB";
  +    public static final String PROVIDER_COM = "COM";
  +    public static final String PROVIDER_BSF = "BSF";
       
       public static final QName QNAME_JAVARPC_PROVIDER = new QName(URI_WSDD_JAVA, PROVIDER_RPC);
       public static final QName QNAME_JAVAMSG_PROVIDER = new QName(URI_WSDD_JAVA, PROVIDER_MSG);
  
  
  
  1.24      +59 -0     xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDProvider.java
  
  Index: WSDDProvider.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDProvider.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- WSDDProvider.java	18 Sep 2002 16:10:39 -0000	1.23
  +++ WSDDProvider.java	25 Oct 2002 17:18:35 -0000	1.24
  @@ -56,6 +56,7 @@
   
   import org.apache.axis.EngineConfiguration;
   import org.apache.axis.Handler;
  +import org.apache.axis.components.logger.LogFactory;
   import org.apache.axis.deployment.wsdd.providers.WSDDHandlerProvider;
   import org.apache.axis.deployment.wsdd.providers.WSDDJavaEJBProvider;
   import org.apache.axis.deployment.wsdd.providers.WSDDJavaMsgProvider;
  @@ -66,6 +67,11 @@
   import javax.xml.namespace.QName;
   import java.util.Hashtable;
   
  +import org.apache.commons.discovery.resource.names.DiscoverServiceNames;
  +import org.apache.commons.discovery.ResourceNameIterator;
  +import org.apache.commons.discovery.resource.ClassLoaders;
  +import org.apache.commons.logging.Log;
  +
   
   /**
    * WSDD provider element
  @@ -77,11 +83,16 @@
    * by namespace URI.
    *
    * @author James Snell
  + * @author Vishy Kasar
    */
   public abstract class WSDDProvider
   {
  +    protected static Log log =
  +        LogFactory.getLog(WSDDProvider.class.getName());
   
   // ** STATIC PROVIDER REGISTRY ** //
  +    private static final String PLUGABLE_PROVIDER_FILENAME = 
  +       "org.apache.axis.deployment.wsdd.Provider";
   
       /** XXX */
       private static Hashtable providers = new Hashtable();
  @@ -91,6 +102,52 @@
           providers.put(WSDDConstants.QNAME_JAVAMSG_PROVIDER, new WSDDJavaMsgProvider());
           providers.put(WSDDConstants.QNAME_HANDLER_PROVIDER, new WSDDHandlerProvider());
           providers.put(WSDDConstants.QNAME_EJB_PROVIDER, new WSDDJavaEJBProvider());
  +        try {
  +            loadPluggableProviders();
  +        } catch (Throwable t){
  +            String msg=t + JavaUtils.LS + JavaUtils.stackToString(t);
  +            log.info(Messages.getMessage("exception01",msg));
  +        }
  +    }
  +
  +    /**
  +       Look for file META-INF/services/org.apache.axis.deployment.wsdd.Provider
  +       in all the JARS, get the classes listed in those files and add them to 
  +       providers list if they are valid providers. 
  +
  +       Here is how the scheme would work.
  +
  +       A company providing a new provider will jar up their provider related
  +       classes in a JAR file. The following file containing the name of the new 
  +       provider class is also made part of this JAR file. 
  +
  +       META-INF/services/org.apache.axis.deployment.wsdd.Provider
  +
  +       By making this JAR part of the webapp, the new provider will be 
  +       automatically discovered. 
  +    */
  +    private static void loadPluggableProviders() {
  +        ClassLoader clzLoader = WSDDProvider.class.getClassLoader();
  +        ClassLoaders loaders = new ClassLoaders();
  +        loaders.put(clzLoader);
  +        DiscoverServiceNames dsn = new DiscoverServiceNames(loaders);
  +        ResourceNameIterator iter = dsn.findResourceNames(PLUGABLE_PROVIDER_FILENAME);
  +        while (iter.hasNext()) {
  +            String className = (String) iter.nextResourceName();
  +            try {
  +                Object o = Class.forName(className).newInstance();
  +                if (o instanceof WSDDProvider) {
  +                    WSDDProvider provider = (WSDDProvider) o;
  +                    String providerName = provider.getName();
  +                    QName q = new QName(WSDDConstants.URI_WSDD_JAVA, providerName);
  +                    providers.put(q, provider);
  +                }
  +            } catch (Exception e) {
  +                String msg=e + JavaUtils.LS + JavaUtils.stackToString(e);
  +                log.info(Messages.getMessage("exception01",msg));
  +                continue;
  +            }
  +        }
       }
   
       /**
  @@ -154,4 +211,6 @@
       public abstract Handler newProviderInstance(WSDDService service,
                                                   EngineConfiguration registry)
           throws Exception;
  +
  +    public abstract String getName();
   }