[jboss-svn-commits] JBossWS SVN: r1173 - in branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws: jaxrpc metadata

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 9 10:53:04 EDT 2006


Author: thomas.diesler at jboss.com
Date: 2006-10-09 10:52:57 -0400 (Mon, 09 Oct 2006)
New Revision: 1173

Modified:
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/MetaDataSynchronization.java
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/FaultMetaData.java
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java
   branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/UnifiedMetaData.java
Log:
Partial commit

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/MetaDataSynchronization.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/MetaDataSynchronization.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/MetaDataSynchronization.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -48,6 +48,7 @@
       if (epMetaData.getServiceEndpointInterface() != seiClass)
          throw new IllegalArgumentException("Endpoint meta data SEI missmatch, expected: " + epMetaData.getServiceEndpointInterfaceName());
 
+      /*
       Method[] methods = seiClass.getMethods();
       for (int i = 0; i < methods.length; i++)
       {
@@ -58,5 +59,6 @@
          if (opMetaData == null)
             throw new ServiceException("Cannot obtain operation meta data for method: " + method);
       }
+      */
    }
 }

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -26,6 +26,7 @@
 import java.lang.reflect.Method;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -106,7 +107,7 @@
    // True if the handlers are initialized
    private boolean handlersInitialized;
    // Maps the java method to the operation meta data
-   private Map<Method, OperationMetaData> opmdCache = new HashMap<Method, OperationMetaData>();
+   private Map<Method, OperationMetaData> opMetaDataCache = new HashMap<Method, OperationMetaData>();
 
    public EndpointMetaData(ServiceMetaData service, QName portName, Type type)
    {
@@ -201,23 +202,20 @@
     */
    public Class getServiceEndpointInterface()
    {
-      Class tmpClass = seiClass;
-      if (tmpClass == null && seiName != null)
+      Class localClass = seiClass;
+      if (localClass == null && seiName != null)
       {
          try
          {
             ClassLoader classLoader = getClassLoader();
-            tmpClass = classLoader.loadClass(seiName);
-            
-            if (service.getUnifiedMetaData().isAllowTypeCaching())
-               seiClass = tmpClass;
+            localClass = classLoader.loadClass(seiName);
          }
          catch (ClassNotFoundException ex)
          {
             throw new WSException("Cannot load service endpoint interface: " + seiName, ex);
          }
       }
-      return tmpClass;
+      return localClass;
    }
 
    public Use getEncodingStyle()
@@ -369,19 +367,7 @@
 
    public OperationMetaData getOperation(Method method)
    {
-      OperationMetaData opMetaData = opmdCache.get(method);
-      if (opMetaData == null)
-      {
-         for (OperationMetaData aux : operations)
-         {
-            if (aux.isJavaMethod(method))
-            {
-               opmdCache.put(method, aux);
-               opMetaData = aux;
-               break;
-            }
-         }
-      }
+      OperationMetaData opMetaData = opMetaDataCache.get(method);
       return opMetaData;
    }
 
@@ -437,7 +423,9 @@
     */
    public void eagerInitialize()
    {
-      getServiceEndpointInterface();
+      seiClass = getServiceEndpointInterface();
+      if (seiClass == null)
+         throw new WSException("Cannot load service endpointInterface: " + seiName);
       
       TypeMappingImpl typeMapping = service.getTypeMapping();
       for (TypeMappingMetaData tmMetaData : service.getTypesMetaData().getTypeMappings())
@@ -484,7 +472,18 @@
          }
       }
 
-      for (OperationMetaData operation : operations)
-         operation.eagerInitialize();
+      List<Method> unsynchronizedMethods = new ArrayList<Method>();
+      unsynchronizedMethods.addAll(Arrays.asList(seiClass.getMethods()));
+      
+      for (OperationMetaData opMetaData : operations)
+      {
+         opMetaData.eagerInitialize(unsynchronizedMethods);
+         Method method = opMetaData.getJavaMethod();
+         if (method != null)
+         {
+            opMetaDataCache.put(method, opMetaData);
+            unsynchronizedMethods.remove(method);
+         }
+      }
    }
 }

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/FaultMetaData.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/FaultMetaData.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/FaultMetaData.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -25,7 +25,6 @@
 
 import javax.xml.namespace.QName;
 
-import org.jboss.logging.Logger;
 import org.jboss.ws.WSException;
 import org.jboss.ws.utils.JavaUtils;
 
@@ -38,9 +37,6 @@
  */
 public class FaultMetaData
 {
-   // provide logging
-   private final Logger log = Logger.getLogger(FaultMetaData.class);
-   
    // The parent operation
    private OperationMetaData opMetaData;
 
@@ -86,29 +82,27 @@
 
    public Class getJavaType()
    {
-      Class tmpType = javaType;
-      if (tmpType == null && javaTypeName != null)
+      Class localJavaType = javaType;
+      if (localJavaType == null && javaTypeName != null)
       {
          try
          {
             ClassLoader loader = opMetaData.getEndpointMetaData().getClassLoader();
-            tmpType = JavaUtils.loadJavaType(javaTypeName, loader);
-            
-            if (opMetaData.getEndpointMetaData().getServiceMetaData().getUnifiedMetaData().isAllowTypeCaching())
-               javaType = tmpType;
+            localJavaType = JavaUtils.loadJavaType(javaTypeName, loader);
          }
          catch (ClassNotFoundException ex)
          {
             throw new WSException("Cannot load java type: " + javaTypeName, ex);
          }
       }
-      return tmpType;
+      return localJavaType;
    }
 
    public void eagerInitialize()
    {
-      // Initialize the cache
-      getJavaType();
+      javaType = getJavaType();
+      if (javaType == null)
+         throw new WSException("Cannot load java type: " + javaTypeName);
    }
 
    public String toString()

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/OperationMetaData.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/OperationMetaData.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/OperationMetaData.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -25,7 +25,6 @@
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 import javax.jws.soap.SOAPBinding.ParameterStyle;
@@ -67,7 +66,6 @@
    private List<ParameterMetaData> parameters = new ArrayList<ParameterMetaData>();
    private List<FaultMetaData> faults = new ArrayList<FaultMetaData>();
    private ParameterMetaData returnParam;
-   private List<Method> unsynchronizedMethods;
 
    public OperationMetaData(QName qname, String javaName)
    {
@@ -159,41 +157,9 @@
       return javaName;
    }
 
-   /** Load the java method. 
-    */
    public Method getJavaMethod()
    {
-      Class seiClass = epMetaData.getServiceEndpointInterface();
-      
-      Method tmpMethod = javaMethod;
-      if (tmpMethod == null && seiClass != null)
-      {
-         // Add all SEI method to the list of unsynchronized methods
-         if (unsynchronizedMethods == null)
-         {
-            unsynchronizedMethods = new ArrayList<Method>(); 
-            unsynchronizedMethods.addAll(Arrays.asList(seiClass.getMethods()));
-         }
-         
-         for (Method method : unsynchronizedMethods)
-         {
-            if (isJavaMethod(method))
-            {
-               // Remove the method from the list of unsynchronized methods
-               if (epMetaData.getServiceMetaData().getUnifiedMetaData().isAllowTypeCaching())
-               {
-                  unsynchronizedMethods.remove(method);
-                  javaMethod = method;
-               }
-               tmpMethod = method;
-               break;
-            }
-         }
-         
-         if (tmpMethod == null)
-            throw new WSException("Cannot find java method: " + javaName);
-      }
-      return tmpMethod;
+      return javaMethod;
    }
 
    public boolean isJavaMethod(Method method)
@@ -528,7 +494,7 @@
    /**
     * @see UnifiedMetaData#eagerInitialize()
     */
-   public void eagerInitialize()
+   public void eagerInitialize(List<Method> unsynchronizedMethods)
    {
       for (ParameterMetaData parameter : parameters)
          parameter.eagerInitialize();
@@ -539,7 +505,26 @@
       for (FaultMetaData fault : faults)
          fault.eagerInitialize();
 
-      getJavaMethod();
+      for (Method method : unsynchronizedMethods)
+      {
+         if (isJavaMethod(method))
+         {
+            javaMethod = method;
+            break;
+         }
+      }
+      
+      // Report unsynchronized java method
+      if (javaMethod == null)
+      {
+         StringBuilder errMsg = new StringBuilder("Cannot synchronize to any of these methods:");
+         for (Method method : unsynchronizedMethods)
+         {
+            errMsg.append("\n" + method);
+         }
+         errMsg.append(this.toString());
+         throw new IllegalStateException(errMsg.toString());
+      }
    }
 
    public String toString()

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/ParameterMetaData.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -31,7 +31,6 @@
 import javax.xml.namespace.QName;
 import javax.xml.rpc.ParameterMode;
 
-import org.jboss.logging.Logger;
 import org.jboss.ws.Constants;
 import org.jboss.ws.WSException;
 import org.jboss.ws.jaxrpc.ParameterWrapping;
@@ -46,9 +45,6 @@
  */
 public class ParameterMetaData
 {
-   // provide logging
-   private final Logger log = Logger.getLogger(ParameterMetaData.class);
-   
    // The parent operation
    private OperationMetaData opMetaData;
 
@@ -122,28 +118,27 @@
    public void setJavaTypeName(String javaTypeName)
    {
       this.javaTypeName = javaTypeName;
-      this.javaType = null;
+      
+      if (javaType != null)
+         throw new IllegalStateException("Cannot set java type name after eager initialization");
    }
 
    public Class getJavaType()
    {
-      Class tmpType = javaType;
-      if (tmpType == null && javaTypeName != null)
+      Class localJavaType = javaType;
+      if (localJavaType == null && javaTypeName != null)
       {
          try
          {
             ClassLoader loader = opMetaData.getEndpointMetaData().getClassLoader();
-            tmpType = JavaUtils.loadJavaType(javaTypeName, loader);
-            
-            if (opMetaData.getEndpointMetaData().getServiceMetaData().getUnifiedMetaData().isAllowTypeCaching())
-               javaType = tmpType;
+            localJavaType = JavaUtils.loadJavaType(javaTypeName, loader);
          }
          catch (ClassNotFoundException ex)
          {
             throw new WSException("Cannot load java type: " + javaTypeName, ex);
          }
       }
-      return tmpType;
+      return localJavaType;
    }
 
 
@@ -288,8 +283,9 @@
          ParameterWrapping.generateWrapper(this, true);
       }
 
-      // Initialize the cache
-      getJavaType();
+      javaType = getJavaType();
+      if (javaType == null)
+         throw new WSException("Cannot load java type: " + javaTypeName);
    }
 
    public String toString()

Modified: branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/UnifiedMetaData.java
===================================================================
--- branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/UnifiedMetaData.java	2006-10-09 11:05:49 UTC (rev 1172)
+++ branches/tdiesler/jbossws-1.0/src/main/java/org/jboss/ws/metadata/UnifiedMetaData.java	2006-10-09 14:52:57 UTC (rev 1173)
@@ -69,7 +69,7 @@
    // The list of service meta data
    private List<ServiceMetaData> services = new ArrayList<ServiceMetaData>();
    // Used by eager initialization
-   private boolean allowTypeCaching = false;
+   private boolean eagerInitialized = false;
 
    public UnifiedMetaData()
    {
@@ -146,27 +146,19 @@
    }
 
    /**
-    * The final web classloader is not available for JSR181-JSE endpoints when 
-    * the meta data model is build. During that phase no java type should be cached. 
-    */
-   public boolean isAllowTypeCaching()
-   {
-      return allowTypeCaching;
-   }
-
-   /**
     * Eagerly initialize all cache values that are normally lazy-loaded. This
     * allows for concurrent read-only access to a <code>UnifiedMetaData</code>
     * instance. This method, however, must be called from a single thread.
     */
    public void eagerInitialize()
    {
-      if (allowTypeCaching == false)
+      if (eagerInitialized == false)
       {
-         allowTypeCaching = true;
-         
          for (ServiceMetaData service : services)
+         {
             service.eagerInitialize();
+         }
+         eagerInitialized = true;
       }
    }
 




More information about the jboss-svn-commits mailing list