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 ru...@apache.org on 2002/08/08 16:35:48 UTC
cvs commit: xml-axis/java/src/org/apache/axis/encoding/ser BeanDeserializer.java BeanDeserializerFactory.java
rubys 2002/08/08 07:35:48
Modified: java/src/org/apache/axis/encoding/ser BeanDeserializer.java
BeanDeserializerFactory.java
Log:
Optimize construction of a BeanDeserializer by caching the
type descriptor and property map.
Revision Changes Path
1.43 +8 -15 xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
Index: BeanDeserializer.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- BeanDeserializer.java 3 Aug 2002 21:25:25 -0000 1.42
+++ BeanDeserializer.java 8 Aug 2002 14:35:48 -0000 1.43
@@ -64,7 +64,6 @@
import org.apache.axis.message.SOAPHandler;
import org.apache.axis.utils.BeanPropertyDescriptor;
import org.apache.axis.utils.JavaUtils;
-import org.apache.axis.utils.BeanUtils;
import org.apache.axis.components.logger.LogFactory;
import org.apache.commons.logging.Log;
@@ -75,7 +74,6 @@
import javax.xml.namespace.QName;
import java.io.Serializable;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -109,22 +107,17 @@
// Construct BeanDeserializer for the indicated class/qname and meta Data
public BeanDeserializer(Class javaType, QName xmlType, TypeDesc typeDesc ) {
+ this(javaType, xmlType, typeDesc,
+ BeanDeserializerFactory.getProperties(javaType, typeDesc));
+ }
+
+ // Construct BeanDeserializer for the indicated class/qname and meta Data
+ public BeanDeserializer(Class javaType, QName xmlType, TypeDesc typeDesc,
+ Map propertyMap ) {
this.xmlType = xmlType;
this.javaType = javaType;
this.typeDesc = typeDesc;
- // Get a list of the bean properties
- BeanPropertyDescriptor[] pd = null;
- if (typeDesc != null) {
- propertyMap = typeDesc.getPropertyDescriptorMap();
- } else {
- pd = BeanUtils.getPd(javaType, null);
- propertyMap = new HashMap();
- // loop through properties and grab the names for later
- for (int i = 0; i < pd.length; i++) {
- BeanPropertyDescriptor descriptor = pd[i];
- propertyMap.put(descriptor.getName(), descriptor);
- }
- }
+ this.propertyMap = propertyMap;
// create a value
try {
1.4 +54 -0 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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- BeanDeserializerFactory.java 11 Jun 2002 14:53:55 -0000 1.3
+++ BeanDeserializerFactory.java 8 Aug 2002 14:35:48 -0000 1.4
@@ -55,16 +55,28 @@
package org.apache.axis.encoding.ser;
+import org.apache.axis.description.TypeDesc;
+import org.apache.axis.encoding.Deserializer;
+import org.apache.axis.utils.BeanPropertyDescriptor;
+import org.apache.axis.utils.BeanUtils;
import org.apache.axis.utils.JavaUtils;
+import java.util.HashMap;
+import java.util.Map;
import javax.xml.namespace.QName;
/**
* DeserializerFactory for Bean
*
* @author Rich Scheuerle <sc...@us.ibm.com>
+ * @author Sam Ruby <ru...@us.ibm.com>
*/
public class BeanDeserializerFactory extends BaseDeserializerFactory {
+
+ /** Type metadata about this class for XML deserialization */
+ protected TypeDesc typeDesc = null;
+ protected Map propertyMap = null;
+
public BeanDeserializerFactory(Class javaType, QName xmlType) {
super(BeanDeserializer.class, xmlType, javaType);
@@ -73,5 +85,47 @@
if (JavaUtils.isEnumClass(javaType)) {
deserClass = EnumDeserializer.class;
}
+ }
+
+ /**
+ * Get a list of the bean properties
+ */
+ public static Map getProperties(Class javaType, TypeDesc typeDesc ) {
+ Map propertyMap = null;
+
+ if (typeDesc != null) {
+ propertyMap = typeDesc.getPropertyDescriptorMap();
+ } else {
+ BeanPropertyDescriptor[] pd = BeanUtils.getPd(javaType, null);
+ propertyMap = new HashMap();
+ // loop through properties and grab the names for later
+ for (int i = 0; i < pd.length; i++) {
+ BeanPropertyDescriptor descriptor = pd[i];
+ propertyMap.put(descriptor.getName(), descriptor);
+ }
+ }
+
+ return propertyMap;
+ }
+
+ /**
+ * Optimize construction of a BeanDeserializer by caching the
+ * type descriptor and property map.
+ */
+ protected Deserializer getGeneralPurpose(String mechanismType) {
+ if (javaType == null || xmlType == null) {
+ return super.getGeneralPurpose(mechanismType);
+ }
+
+ 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);
}
}