[jbossws-commits] JBossWS SVN: r3546 - in trunk/integration: spi/src/main/java/org/jboss/ws/integration and 2 other directories.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Tue Jun 12 05:59:56 EDT 2007


Author: thomas.diesler at jboss.com
Date: 2007-06-12 05:59:56 -0400 (Tue, 12 Jun 2007)
New Revision: 3546

Added:
   trunk/integration/spi/src/main/java/org/jboss/ws/integration/ServiceRefHandlerFactory.java
   trunk/integration/spi/src/main/java/org/jboss/wsf/spi/utils/ServiceLoader.java
Modified:
   trunk/integration/native/src/main/resources/jbossws-native50.sar/META-INF/jbossws-beans.xml
   trunk/integration/xfire/version.properties
Log:
Fix ServiceRefHandler loading

Modified: trunk/integration/native/src/main/resources/jbossws-native50.sar/META-INF/jbossws-beans.xml
===================================================================
--- trunk/integration/native/src/main/resources/jbossws-native50.sar/META-INF/jbossws-beans.xml	2007-06-12 08:39:59 UTC (rev 3545)
+++ trunk/integration/native/src/main/resources/jbossws-native50.sar/META-INF/jbossws-beans.xml	2007-06-12 09:59:56 UTC (rev 3546)
@@ -34,8 +34,7 @@
   </bean>
   
   <!-- Bind Service objects in client environment context  -->
-  <!-- The bean name is compiled into the server. Changeit with the next release. -->
-  <bean name="ServiceRefHandler" class="org.jboss.ws.core.client.ServiceRefHandlerImpl"/>
+  <bean name="WSServiceRefHandler" class="org.jboss.ws.core.client.ServiceRefHandlerImpl"/>
   
   <!-- Locate the single instance of the kernel -->  
   <bean name="WSKernelLocator" class="org.jboss.ws.integration.KernelLocator">

Added: trunk/integration/spi/src/main/java/org/jboss/ws/integration/ServiceRefHandlerFactory.java
===================================================================
--- trunk/integration/spi/src/main/java/org/jboss/ws/integration/ServiceRefHandlerFactory.java	                        (rev 0)
+++ trunk/integration/spi/src/main/java/org/jboss/ws/integration/ServiceRefHandlerFactory.java	2007-06-12 09:59:56 UTC (rev 3546)
@@ -0,0 +1,76 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ws.integration;
+
+import org.jboss.kernel.Kernel;
+import org.jboss.kernel.spi.registry.KernelRegistry;
+import org.jboss.kernel.spi.registry.KernelRegistryEntry;
+import org.jboss.wsf.spi.utils.ServiceLoader;
+
+// $Id$
+
+/**
+ * A factory for the ServiceRefHandler 
+ * 
+ * @author Thomas.Diesler at jboss.org
+ * @since 05-May-2004
+ */
+public abstract class ServiceRefHandlerFactory
+{
+   public static ServiceRefHandler getServiceRefHandler()
+   {
+      ServiceRefHandler handler;
+      if (KernelLocator.getKernel() != null)
+      {
+         handler = getServerSideServiceRefHandler();
+      }
+      else
+      {
+         handler = getClientSideServiceRefHandler();
+      }
+      return handler;
+   }
+
+   private static ServiceRefHandler getServerSideServiceRefHandler()
+   {
+      Kernel kernel = KernelLocator.getKernel();
+      KernelRegistry registry = kernel.getRegistry();
+      KernelRegistryEntry entry = registry.getEntry("WSServiceRefHandler");
+      ServiceRefHandler handler = (ServiceRefHandler)entry.getTarget();
+
+      // Try legancy JBossAS-4.2 name
+      if (handler == null)
+      {
+         entry = registry.getEntry("ServiceRefHandler");
+         handler = (ServiceRefHandler)entry.getTarget();
+      }
+      return handler;
+   }
+
+   private static ServiceRefHandler getClientSideServiceRefHandler()
+   {
+      String propName = ServiceRefHandler.class.getName();
+      String defaultImpl = "org.jboss.ws.core.client.ServiceRefHandlerImpl";
+      ServiceRefHandler handler = (ServiceRefHandler)ServiceLoader.loadService(propName, defaultImpl);
+      return handler;
+   }
+}


Property changes on: trunk/integration/spi/src/main/java/org/jboss/ws/integration/ServiceRefHandlerFactory.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: trunk/integration/spi/src/main/java/org/jboss/wsf/spi/utils/ServiceLoader.java
===================================================================
--- trunk/integration/spi/src/main/java/org/jboss/wsf/spi/utils/ServiceLoader.java	                        (rev 0)
+++ trunk/integration/spi/src/main/java/org/jboss/wsf/spi/utils/ServiceLoader.java	2007-06-12 09:59:56 UTC (rev 3546)
@@ -0,0 +1,251 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.wsf.spi.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Properties;
+
+// $Id$
+
+/**
+ * Load a service class using this ordered lookup procedure
+ *
+ * @author Thomas.Diesler at jboss.com
+ * @since 14-Dec-2006
+ */
+public abstract class ServiceLoader
+{
+   /**
+    * This method uses the algirithm below using the JAXWS Provider as an example. 
+    * 
+    * 1. If a resource with the name of META-INF/services/javax.xml.ws.spi.Provider exists, then
+    * its first line, if present, is used as the UTF-8 encoded name of the implementation class.
+    * 
+    * 2. If the ${java.home}/lib/jaxws.properties file exists and it is readable by the 
+    * java.util.Properties.load(InputStream) method and it contains an entry whose key is 
+    * javax.xml.ws.spi.Provider, then the value of that entry is used as the name of the implementation class.
+    * 
+    * 3. If a system property with the name javax.xml.ws.spi.Provider is defined, then its value is used
+    * as the name of the implementation class.
+    * 
+    * 4. Finally, a default implementation class name is used.
+    */
+   public static Object loadService(String propertyName, String defaultFactory)
+   {
+      Object factory = loadFromServices(propertyName, null);
+      if (factory == null)
+      {
+         factory = loadFromPropertiesFile(propertyName, null);
+      }
+      if (factory == null)
+      {
+         factory = loadFromSystemProperty(propertyName, defaultFactory);
+      }
+      return factory;
+   }
+   
+   /** Use the Services API (as detailed in the JAR specification), if available, to determine the classname.
+    */
+   public static Object loadFromServices(String propertyName, String defaultFactory)
+   {
+      Object factory = null;
+      String factoryName = null;
+      ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+      // Use the Services API (as detailed in the JAR specification), if available, to determine the classname.
+      String filename = "META-INF/services/" + propertyName;
+      InputStream inStream = loader.getResourceAsStream(filename);
+      if (inStream != null)
+      {
+         try
+         {
+            BufferedReader br = new BufferedReader(new InputStreamReader(inStream, "UTF-8"));
+            factoryName = br.readLine();
+            br.close();
+            if (factoryName != null)
+            {
+               Class factoryClass = loader.loadClass(factoryName);
+               factory = factoryClass.newInstance();
+            }
+         }
+         catch (Throwable t)
+         {
+            throw new IllegalStateException("Failed to load " + propertyName + ": " + factoryName, t);
+         }
+      }
+
+      // Use the default factory implementation class.
+      if (factory == null && defaultFactory != null)
+      {
+         factory = loadDefault(defaultFactory);
+      }
+
+      return factory;
+   }
+
+   /** Use the system property
+    */
+   public static Object loadFromSystemProperty(String propertyName, String defaultFactory)
+   {
+      Object factory = null;
+      ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+      PrivilegedAction action = new PropertyAccessAction(propertyName);
+      String factoryName = (String)AccessController.doPrivileged(action);
+      if (factoryName != null)
+      {
+         try
+         {
+            //if(log.isDebugEnabled()) log.debug("Load from system property: " + factoryName);
+            Class factoryClass = loader.loadClass(factoryName);
+            factory = factoryClass.newInstance();
+         }
+         catch (Throwable t)
+         {
+            throw new IllegalStateException("Failed to load " + propertyName + ": " + factoryName, t);
+         }
+      }
+
+      // Use the default factory implementation class.
+      if (factory == null && defaultFactory != null)
+      {
+         factory = loadDefault(defaultFactory);
+      }
+
+      return factory;
+   }
+
+   /**
+    * Use the properties file "${java.home}/lib/jaxws.properties" in the JRE directory.
+    * This configuration file is in standard java.util.Properties format and contains the 
+    * fully qualified name of the implementation class with the key being the system property defined above.
+    */
+   public static Object loadFromPropertiesFile(String propertyName, String defaultFactory)
+   {
+      Object factory = null;
+      String factoryName = null;
+      ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+      // Use the properties file "lib/jaxm.properties" in the JRE directory.
+      // This configuration file is in standard java.util.Properties format and contains the fully qualified name of the implementation class with the key being the system property defined above.
+      PrivilegedAction action = new PropertyAccessAction("java.home");
+      String javaHome = (String)AccessController.doPrivileged(action);
+      File jaxmFile = new File(javaHome + "/lib/jaxws.properties");
+      if (jaxmFile.exists())
+      {
+         try
+         {
+            action = new PropertyFileAccessAction(jaxmFile.getCanonicalPath());
+            Properties jaxmProperties = (Properties)AccessController.doPrivileged(action);
+            factoryName = jaxmProperties.getProperty(propertyName);
+            if (factoryName != null)
+            {
+               //if(log.isDebugEnabled()) log.debug("Load from " + jaxmFile + ": " + factoryName);
+               Class factoryClass = loader.loadClass(factoryName);
+               factory = factoryClass.newInstance();
+            }
+         }
+         catch (Throwable t)
+         {
+            throw new IllegalStateException("Failed to load " + propertyName + ": " + factoryName, t);
+         }
+      }
+
+      // Use the default factory implementation class.
+      if (factory == null && defaultFactory != null)
+      {
+         factory = loadDefault(defaultFactory);
+      }
+
+      return factory;
+   }
+
+   private static Object loadDefault(String defaultFactory)
+   {
+      Object factory = null;
+      ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+      // Use the default factory implementation class.
+      if (defaultFactory != null)
+      {
+         try
+         {
+            //if(log.isDebugEnabled()) log.debug("Load from default: " + factoryName);
+            Class factoryClass = loader.loadClass(defaultFactory);
+            factory = factoryClass.newInstance();
+         }
+         catch (Throwable t)
+         {
+            throw new IllegalStateException("Failed to load: " + defaultFactory, t);
+         }
+      }
+
+      return factory;
+   }
+
+   private static class PropertyAccessAction implements PrivilegedAction
+   {
+      private String name;
+
+      PropertyAccessAction(String name)
+      {
+         this.name = name;
+      }
+
+      public Object run()
+      {
+         return System.getProperty(name);
+      }
+   }
+
+   private static class PropertyFileAccessAction implements PrivilegedAction
+   {
+      private String filename;
+
+      PropertyFileAccessAction(String filename)
+      {
+         this.filename = filename;
+      }
+
+      public Object run()
+      {
+         try
+         {
+            InputStream inStream = new FileInputStream(filename);
+            Properties props = new Properties();
+            props.load(inStream);
+            return props;
+         }
+         catch (IOException ex)
+         {
+            throw new SecurityException("Cannot load properties: " + filename, ex);
+         }
+      }
+   }
+}


Property changes on: trunk/integration/spi/src/main/java/org/jboss/wsf/spi/utils/ServiceLoader.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Modified: trunk/integration/xfire/version.properties
===================================================================
--- trunk/integration/xfire/version.properties	2007-06-12 08:39:59 UTC (rev 3545)
+++ trunk/integration/xfire/version.properties	2007-06-12 09:59:56 UTC (rev 3546)
@@ -1,7 +1,7 @@
 
 # $Id: version.properties 2928 2007-04-26 10:53:56Z thomas.diesler at jboss.com $
 
-sunri.implementation.title=JBoss Web Services - JBossWS/SunRI
+sunri.implementation.title=JBoss Web Services - JBossWS/XFire
 
 # Thirdparty library versions
 ibm-wsdl4j=1.6.2




More information about the jbossws-commits mailing list