001: /*
002: * Copyright (C) The MX4J Contributors.
003: * All rights reserved.
004: *
005: * This software is distributed under the terms of the MX4J License version 1.0.
006: * See the terms of the MX4J License in the documentation provided with this software.
007: */
008:
009: package mx4j.tools.remote.soap.axis.ser;
010:
011: import javax.xml.namespace.QName;
012:
013: import mx4j.log.Log;
014: import mx4j.log.Logger;
015: import org.apache.axis.encoding.DeserializationContext;
016: import org.apache.axis.encoding.Deserializer;
017: import org.apache.axis.encoding.DeserializerImpl;
018: import org.apache.axis.encoding.DeserializerTarget;
019: import org.apache.axis.message.SOAPHandler;
020: import org.xml.sax.Attributes;
021: import org.xml.sax.SAXException;
022:
023: /**
024: * @version $Revision: 1.4 $
025: */
026: public abstract class AxisDeserializer extends DeserializerImpl {
027: protected Logger getLogger() {
028: return Log.getLogger(getClass().getName());
029: }
030:
031: public void onStartElement(String namespace, String localName,
032: String prefix, Attributes attributes,
033: DeserializationContext context) throws SAXException {
034: Logger logger = getLogger();
035: if (logger.isEnabledFor(Logger.TRACE)) {
036: logger.trace("Enter: " + getClass().getName()
037: + ".onStartElement()");
038: logger.trace("namespace: " + namespace);
039: logger.trace("localName: " + localName);
040: logger.trace("prefix: " + prefix);
041: }
042: }
043:
044: public SOAPHandler onStartChild(String namespace, String localName,
045: String prefix, Attributes attributes,
046: DeserializationContext context) throws SAXException {
047: Logger logger = getLogger();
048: if (logger.isEnabledFor(Logger.TRACE)) {
049: logger.trace("Enter: " + getClass().getName()
050: + ".onStartChild()");
051: logger.trace("namespace: " + namespace);
052: logger.trace("localName: " + localName);
053: logger.trace("prefix: " + prefix);
054: }
055: /*
056: if (context.isNil(attributes))
057: {
058: setChildValue(null, localName);
059: return null;
060: }
061: */
062: QName itemType = context.getTypeFromAttributes(namespace,
063: localName, attributes);
064: Deserializer deserializer = null;
065: if (itemType != null)
066: deserializer = context.getDeserializerForType(itemType);
067: if (deserializer == null)
068: deserializer = new DeserializerImpl();
069:
070: deserializer.registerValueTarget(new DeserializerTarget(this ,
071: localName));
072: addChildDeserializer(deserializer);
073:
074: return (SOAPHandler) deserializer;
075: }
076:
077: public void setChildValue(Object value, Object hint)
078: throws SAXException {
079: Logger logger = getLogger();
080: if (logger.isEnabledFor(Logger.TRACE)) {
081: logger.trace("Enter: " + getClass().getName()
082: + ".setChildValue()");
083: logger.trace("value: " + value);
084: logger.trace("hint: " + hint);
085: }
086: onSetChildValue(value, hint);
087: }
088:
089: protected abstract void onSetChildValue(Object value, Object hint)
090: throws SAXException;
091:
092: public void onEndElement(String namespace, String localName,
093: DeserializationContext context) throws SAXException {
094: Logger logger = getLogger();
095: if (logger.isEnabledFor(Logger.TRACE)) {
096: logger.trace("Enter: " + getClass().getName()
097: + ".onEndElement()");
098: logger.trace("namespace: " + namespace);
099: logger.trace("localName: " + localName);
100: }
101: setValue(createObject());
102: }
103:
104: protected abstract Object createObject() throws SAXException;
105: }
|