1 package org.codehaus.ivory.serialize;
2
3 import javax.xml.namespace.QName;
4 import javax.xml.rpc.JAXRPCException;
5
6 import org.apache.axis.description.TypeDesc;
7 import org.apache.axis.encoding.Serializer;
8 import org.apache.axis.encoding.ser.BaseSerializerFactory;
9 import org.apache.axis.encoding.ser.EnumSerializer;
10 import org.apache.axis.utils.BeanPropertyDescriptor;
11 import org.apache.axis.utils.JavaUtils;
12
13 /***
14 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
15 * @since May 21, 2003
16 */
17 public class MetadataSerializerFactory extends BaseSerializerFactory
18 {
19 protected TypeDesc typeDesc = null;
20 protected BeanPropertyDescriptor[] propertyDescriptor = null;
21
22 public MetadataSerializerFactory(Class javaType, QName xmlType)
23 {
24 super(MetadataSerializer.class, xmlType, javaType);
25 // Sometimes an Enumeration class is registered as a Bean.
26 // If this is the case, silently switch to the EnumSerializer
27 if (JavaUtils.isEnumClass(javaType))
28 {
29 serClass = EnumSerializer.class;
30 }
31
32 typeDesc = TypeDesc.getTypeDescForClass(javaType);
33
34 if (typeDesc != null)
35 {
36 propertyDescriptor = typeDesc.getPropertyDescriptors();
37 }
38 else
39 {
40 propertyDescriptor = MetaBeanUtils.getPd(javaType, null);
41 }
42 }
43
44 public javax.xml.rpc.encoding.Serializer getSerializerAs(
45 String mechanismType)
46 throws JAXRPCException
47 {
48 return (Serializer) super.getSerializerAs(mechanismType);
49 }
50
51 /***
52 * Optimize construction of a BeanSerializer by caching the
53 * type and property descriptors.
54 */
55 protected Serializer getGeneralPurpose(String mechanismType)
56 {
57 if (javaType == null || xmlType == null)
58 {
59 return super.getGeneralPurpose(mechanismType);
60 }
61
62 if (serClass == EnumSerializer.class)
63 {
64 return super.getGeneralPurpose(mechanismType);
65 }
66
67 return new MetadataSerializer(
68 javaType,
69 xmlType,
70 typeDesc,
71 propertyDescriptor);
72 }
73 }
This page was automatically generated by Maven