butek 02/02/20 08:49:53
Modified: java/src/org/apache/axis/client Stub.java
java/src/org/apache/axis/wsdl/toJava JavaStubWriter.java
Log:
Make type mapping registration in the stubs thread safe.
Revision Changes Path
1.5 +16 -0 xml-axis/java/src/org/apache/axis/client/Stub.java
Index: Stub.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Stub.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Stub.java 20 Feb 2002 13:55:19 -0000 1.4
+++ Stub.java 20 Feb 2002 16:49:53 -0000 1.5
@@ -97,6 +97,22 @@
protected URL cachedEndpoint = null;
protected Integer cachedTimeout = null;
+ // Flag to determine whether this is the first call to register type mappings.
+ // firstCallLock is used to access this in a thread-safe manner.
+ private boolean firstCall = true;
+ private Object firstCallLock = new Object();
+
+ /**
+ * Is this the first time the type mappings are being registered?
+ */
+ protected boolean firstCall() {
+ synchronized (firstCallLock) {
+ boolean ret = firstCall;
+ firstCall = false;
+ return ret;
+ }
+ } // firstCall
+
/**
* Sets the value for a named property. JAX-RPC 1.0 specification
* specifies a standard set of properties that may be passed
1.33 +1 -3
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
Index: JavaStubWriter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- JavaStubWriter.java 20 Feb 2002 13:55:20 -0000 1.32
+++ JavaStubWriter.java 20 Feb 2002 16:49:53 -0000 1.33
@@ -133,7 +133,6 @@
pw.println(" private java.util.Vector cachedSerQNames = new
java.util.Vector();");
pw.println(" private java.util.Vector cachedSerFactories = new
java.util.Vector();");
pw.println(" private java.util.Vector cachedDeserFactories = new
java.util.Vector();");
- pw.println(" private boolean firstCall = true;");
}
pw.println();
@@ -199,8 +198,7 @@
pw.println(" // The type mapping information is actually
registered in");
pw.println(" // the TypeMappingRegistry of the service,
which");
pw.println(" // is the reason why registration is only
needed for the first call.");
- pw.println(" if (firstCall) {");
- pw.println(" firstCall = false;");
+ pw.println(" if (firstCall()) {");
pw.println(" for (int i = 0; i <
cachedSerFactories.size(); ++i) {");
pw.println(" Class cls = (Class)
cachedSerClasses.get(i);");
pw.println(" javax.xml.rpc.namespace.QName qName =");