[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