| package test.encoding; |
| |
| import org.apache.axis.Constants; |
| import org.apache.axis.encoding.DeserializationContext; |
| import org.apache.axis.encoding.Deserializer; |
| import org.apache.axis.encoding.DeserializerImpl; |
| import org.apache.axis.encoding.FieldTarget; |
| import org.apache.axis.message.SOAPHandler; |
| import org.xml.sax.Attributes; |
| import org.xml.sax.SAXException; |
| |
| import javax.xml.namespace.QName; |
| import java.util.Hashtable; |
| |
| public class DataDeser extends DeserializerImpl |
| { |
| public static final String STRINGMEMBER = "stringMember"; |
| public static final String FLOATMEMBER = "floatMember"; |
| |
| private Hashtable typesByMemberName = new Hashtable(); |
| |
| public DataDeser() |
| { |
| typesByMemberName.put(STRINGMEMBER, Constants.XSD_STRING); |
| typesByMemberName.put(FLOATMEMBER, Constants.XSD_FLOAT); |
| value = new Data(); |
| } |
| |
| /** DESERIALIZER STUFF - event handlers |
| */ |
| |
| /** |
| * This method is invoked when an element start tag is encountered. |
| * @param namespace is the namespace of the element |
| * @param localName is the name of the element |
| * @param prefix is the prefix of the element |
| * @param attributes are the attributes on the element...used to get the type |
| * @param context is the DeserializationContext |
| */ |
| public SOAPHandler onStartChild(String namespace, |
| String localName, |
| String prefix, |
| Attributes attributes, |
| DeserializationContext context) |
| throws SAXException |
| { |
| QName typeQName = (QName)typesByMemberName.get(localName); |
| if (typeQName == null) |
| throw new SAXException("Invalid element in Data struct - " + localName); |
| |
| // These can come in either order. |
| Deserializer dSer = context.getDeserializerForType(typeQName); |
| try { |
| dSer.registerValueTarget(new FieldTarget(value, localName)); |
| } catch (NoSuchFieldException e) { |
| throw new SAXException(e); |
| } |
| |
| if (dSer == null) |
| throw new SAXException("No deserializer for a " + typeQName + "???"); |
| |
| return (SOAPHandler)dSer; |
| } |
| } |