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/09/18 00:55:47 UTC
cvs commit: xml-axis/java/src/org/apache/axis/encoding/ser BaseDeserializerFactory.java BaseSerializerFactory.java BeanDeserializerFactory.java BeanSerializerFactory.java
dims 2002/09/17 15:55:47
Modified: java/src/org/apache/axis/encoding/ser
BaseDeserializerFactory.java
BaseSerializerFactory.java
BeanDeserializerFactory.java
BeanSerializerFactory.java
Log:
Possible fix for Bug 12741 - Multithreaded Axis client causes serialization exceptions in Axis service
Note:
- Got rid of firstCall as it does not protect the code properly in multi-threaded, heavy volume situations.
Revision Changes Path
1.8 +42 -28 xml-axis/java/src/org/apache/axis/encoding/ser/BaseDeserializerFactory.java
Index: BaseDeserializerFactory.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BaseDeserializerFactory.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- BaseDeserializerFactory.java 27 Jun 2002 17:22:32 -0000 1.7
+++ BaseDeserializerFactory.java 17 Sep 2002 22:55:47 -0000 1.8
@@ -83,7 +83,6 @@
protected Class javaType = null;
protected Constructor deserClassConstructor = null;
protected Method getDeserializer = null;
- protected boolean firstCall = true;
/**
* Constructor
@@ -124,7 +123,6 @@
} catch (Exception e) {
throw new JAXRPCException(e);
}
- firstCall = false;
return deser;
}
@@ -134,12 +132,8 @@
*/
protected Deserializer getGeneralPurpose(String mechanismType) {
if (javaType != null && xmlType != null) {
- if (deserClassConstructor == null && firstCall) {
- try {
- deserClassConstructor =
- deserClass.getConstructor(
- new Class[] {Class.class, QName.class});
- } catch (NoSuchMethodException e) {}
+ if (deserClassConstructor == null) {
+ deserClassConstructor = getConstructor(deserClass);
}
if (deserClassConstructor != null) {
try {
@@ -155,31 +149,24 @@
}
/**
+ * return constructor for class if any
+ */
+ private Constructor getConstructor(Class clazz) {
+ try {
+ return clazz.getConstructor(
+ new Class[] {Class.class, QName.class});
+ } catch (NoSuchMethodException e) {}
+ return null;
+ }
+
+ /**
* Obtains a deserializer by invoking getDeserializer method in the
* javaType class or its Helper class.
*/
protected Deserializer getSpecialized(String mechanismType) {
if (javaType != null && xmlType != null) {
- if (getDeserializer == null && firstCall) {
- try {
- getDeserializer =
- javaType.getMethod("getDeserializer",
- new Class[] {String.class,
- Class.class,
- QName.class});
- } catch (NoSuchMethodException e) {}
- if (getDeserializer == null) {
- try {
- Class helper = ClassUtils.forName(
- javaType.getName() + "_Helper");
- getDeserializer =
- helper.getMethod("getDeserializer",
- new Class[] {String.class,
- Class.class,
- QName.class});
- } catch (NoSuchMethodException e) {
- } catch (ClassNotFoundException e) {}
- }
+ if (getDeserializer == null) {
+ getDeserializer = getDeserializerMethod(javaType);
}
if (getDeserializer != null) {
try {
@@ -196,6 +183,33 @@
return null;
}
+ /**
+ * Returns the "getDeserializer" method if any.
+ */
+ private Method getDeserializerMethod(Class clazz) {
+ Method method = null;
+ try {
+ method =
+ clazz.getMethod("getDeserializer",
+ new Class[] {String.class,
+ Class.class,
+ QName.class});
+ } catch (NoSuchMethodException e) {}
+ if (method == null) {
+ try {
+ Class helper = ClassUtils.forName(
+ clazz.getName() + "_Helper");
+ method =
+ helper.getMethod("getDeserializer",
+ new Class[] {String.class,
+ Class.class,
+ QName.class});
+ } catch (NoSuchMethodException e) {
+ } catch (ClassNotFoundException e) {}
+ }
+ return method;
+ }
+
/**
* Returns a list of all XML processing mechanism types supported by this DeserializerFactory.
*
1.14 +45 -29 xml-axis/java/src/org/apache/axis/encoding/ser/BaseSerializerFactory.java
Index: BaseSerializerFactory.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BaseSerializerFactory.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- BaseSerializerFactory.java 17 Sep 2002 22:21:27 -0000 1.13
+++ BaseSerializerFactory.java 17 Sep 2002 22:55:47 -0000 1.14
@@ -98,7 +98,6 @@
protected Class javaType = null;
protected Constructor serClassConstructor = null;
protected Method getSerializer = null;
- protected boolean firstCall = true;
/**
* Constructor
@@ -148,7 +147,6 @@
serClass.getName()),
e);
}
- firstCall = false;
return ser;
}
@@ -158,13 +156,10 @@
*/
protected Serializer getGeneralPurpose(String mechanismType) {
if (javaType != null && xmlType != null) {
- if (serClassConstructor == null && firstCall) {
- try {
- serClassConstructor =
- serClass.getConstructor(
- new Class[] {Class.class, QName.class});
- } catch (NoSuchMethodException e) {}
+ if (serClassConstructor == null) {
+ serClassConstructor = getConstructor(serClass);
}
+
if (serClassConstructor != null) {
try {
return (Serializer)
@@ -177,33 +172,26 @@
}
return null;
}
-
+
+ /**
+ * return constructor for class if any
+ */
+ private Constructor getConstructor(Class clazz) {
+ try {
+ return clazz.getConstructor(
+ new Class[] {Class.class, QName.class});
+ } catch (NoSuchMethodException e) {}
+ return null;
+ }
+
/**
* Obtains a serializer by invoking getSerializer method in the
* javaType class or its Helper class.
*/
protected Serializer getSpecialized(String mechanismType) {
if (javaType != null && xmlType != null) {
- if (getSerializer == null && firstCall) {
- try {
- getSerializer =
- javaType.getMethod("getSerializer",
- new Class[] {String.class,
- Class.class,
- QName.class});
- } catch (NoSuchMethodException e) {}
- if (getSerializer == null) {
- try {
- Class helper = ClassUtils.forName(
- javaType.getName() + "_Helper");
- getSerializer =
- helper.getMethod("getSerializer",
- new Class[] {String.class,
- Class.class,
- QName.class});
- } catch (NoSuchMethodException e) {
- } catch (ClassNotFoundException e) {}
- }
+ if (getSerializer == null) {
+ getSerializer = getSerializerMethod(javaType);
}
if (getSerializer != null) {
try {
@@ -218,6 +206,34 @@
}
}
return null;
+ }
+
+ /**
+ * Returns the "getSerializer" method if any.
+ */
+ private Method getSerializerMethod(Class clazz) {
+ Method method = null;
+ try {
+ method =
+ clazz.getMethod("getSerializer",
+ new Class[] {String.class,
+ Class.class,
+ QName.class});
+ } catch (NoSuchMethodException e) {}
+
+ if (method == null) {
+ try {
+ Class helper = ClassUtils.forName(
+ clazz.getName() + "_Helper");
+ method =
+ helper.getMethod("getSerializer",
+ new Class[] {String.class,
+ Class.class,
+ QName.class});
+ } catch (NoSuchMethodException e) {
+ } catch (ClassNotFoundException e) {}
+ }
+ return method;
}
/**
1.5 +3 -5 xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializerFactory.java
Index: BeanDeserializerFactory.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializerFactory.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BeanDeserializerFactory.java 8 Aug 2002 14:35:48 -0000 1.4
+++ BeanDeserializerFactory.java 17 Sep 2002 22:55:47 -0000 1.5
@@ -85,6 +85,9 @@
if (JavaUtils.isEnumClass(javaType)) {
deserClass = EnumDeserializer.class;
}
+
+ typeDesc = TypeDesc.getTypeDescForClass(javaType);
+ propertyMap = getProperties(javaType, typeDesc);
}
/**
@@ -119,11 +122,6 @@
if (deserClass == EnumSerializer.class) {
return super.getGeneralPurpose(mechanismType);
- }
-
- if (propertyMap == null && firstCall) {
- typeDesc = TypeDesc.getTypeDescForClass(javaType);
- propertyMap = getProperties(javaType, typeDesc);
}
return new BeanDeserializer(javaType, xmlType, typeDesc, propertyMap);
1.6 +8 -10 xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializerFactory.java
Index: BeanSerializerFactory.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializerFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BeanSerializerFactory.java 7 Aug 2002 22:31:33 -0000 1.5
+++ BeanSerializerFactory.java 17 Sep 2002 22:55:47 -0000 1.6
@@ -91,6 +91,14 @@
if (JavaUtils.isEnumClass(javaType)) {
serClass = EnumSerializer.class;
}
+
+ typeDesc = TypeDesc.getTypeDescForClass(javaType);
+
+ if (typeDesc != null) {
+ propertyDescriptor = typeDesc.getPropertyDescriptors();
+ } else {
+ propertyDescriptor = BeanUtils.getPd(javaType, null);
+ }
}
public javax.xml.rpc.encoding.Serializer getSerializerAs(String mechanismType)
@@ -109,16 +117,6 @@
if (serClass == EnumSerializer.class) {
return super.getGeneralPurpose(mechanismType);
- }
-
- if (propertyDescriptor == null && firstCall) {
- typeDesc = TypeDesc.getTypeDescForClass(javaType);
-
- if (typeDesc != null) {
- propertyDescriptor = typeDesc.getPropertyDescriptors();
- } else {
- propertyDescriptor = BeanUtils.getPd(javaType, null);
- }
}
return new BeanSerializer(javaType, xmlType, typeDesc,