001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.axis.client;
018
019 import java.io.Serializable;
020 import java.util.Iterator;
021 import java.util.List;
022
023 import javax.xml.namespace.QName;
024 import javax.xml.rpc.encoding.DeserializerFactory;
025 import javax.xml.rpc.encoding.SerializerFactory;
026 import javax.xml.rpc.encoding.TypeMapping;
027
028 import org.apache.axis.description.FieldDesc;
029 import org.apache.axis.description.TypeDesc;
030 import org.apache.axis.encoding.ser.BaseDeserializerFactory;
031 import org.apache.axis.encoding.ser.BaseSerializerFactory;
032
033 /**
034 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
035 */
036 public class TypeInfo implements Serializable {
037 private final Class clazz;
038 private final QName qName;
039 private final Class serFactoryClass;
040 private final Class deserFactoryClass;
041 private final boolean canSearchParents;
042 private final FieldDesc[] fields;
043
044 public static void register(List typeInfo, TypeMapping typeMapping) {
045 for (Iterator iter = typeInfo.iterator(); iter.hasNext();) {
046 TypeInfo info = (TypeInfo) iter.next();
047 info.register(typeMapping);
048 }
049 }
050
051 public TypeInfo(Class clazz, QName qName, Class serializerClass, Class deserializerClass, boolean canSearchParents, FieldDesc[] fields) {
052 this.clazz = clazz;
053 this.qName = qName;
054 this.serFactoryClass = serializerClass;
055 this.deserFactoryClass = deserializerClass;
056 this.canSearchParents =canSearchParents;
057 this.fields = fields;
058 }
059
060 public Class getClazz() {
061 return clazz;
062 }
063
064 public QName getqName() {
065 return qName;
066 }
067
068 public Class getSerFactoryClass() {
069 return serFactoryClass;
070 }
071
072 public Class getDeserFactoryClass() {
073 return deserFactoryClass;
074 }
075
076 public boolean isCanSearchParents() {
077 return canSearchParents;
078 }
079
080 public FieldDesc[] getFields() {
081 return fields;
082 }
083
084 public TypeDesc buildTypeDesc() {
085 TypeDesc typeDesc = new TypeDesc(clazz, canSearchParents);
086 typeDesc.setXmlType(qName);
087 typeDesc.setFields(fields);
088 return typeDesc;
089 }
090
091 public void register(TypeMapping typeMapping) {
092 SerializerFactory ser = BaseSerializerFactory.createFactory(serFactoryClass, clazz, qName);
093 DeserializerFactory deser = BaseDeserializerFactory.createFactory(deserFactoryClass, clazz, qName);
094
095 typeMapping.register(clazz, qName, ser, deser);
096 }
097
098 public static class UpdatableTypeInfo {
099 protected Class clazz;
100 protected QName qName;
101 protected Class serializerClass;
102 protected Class deserializerClass;
103 protected boolean canSearchParents;
104 protected FieldDesc[] fields;
105
106 public TypeInfo buildTypeInfo() {
107 if (null == clazz) {
108 throw new IllegalStateException("clazz is null");
109 } else if (null == qName) {
110 throw new IllegalStateException("qName is null");
111 } else if (null == serializerClass) {
112 throw new IllegalStateException("serializerClass is null");
113 } else if (null == deserializerClass) {
114 throw new IllegalStateException("deserializerClass is null");
115 } else if (null == fields) {
116 throw new IllegalStateException("fields is null");
117 }
118 return new TypeInfo(clazz, qName, serializerClass, deserializerClass, canSearchParents, fields);
119 }
120
121 public void setClazz(Class clazz) {
122 this.clazz = clazz;
123 }
124
125 public void setDeserializerClass(Class deserializerClass) {
126 this.deserializerClass = deserializerClass;
127 }
128
129 public void setFields(FieldDesc[] fields) {
130 this.fields = fields;
131 }
132
133 public void setQName(QName name) {
134 qName = name;
135 }
136
137 public void setSerializerClass(Class serializerClass) {
138 this.serializerClass = serializerClass;
139 }
140
141 public void setCanSearchParents(boolean canSearchParents) {
142 this.canSearchParents = canSearchParents;
143 }
144 }
145 }