package gov.nih.nci.cagrid.common;
import org.apache.axis.MessageContext;
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.message.EnvelopeHandler;
import org.apache.axis.message.SOAPHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* ConfigurableObjectDeserializationContext
* Object Deserialization Context that allows configuration by WSDD
*
* @author <A HREF="MAILTO:ervin@bmi.osu.edu">David W. Ervin</A>
*
* @created Jun 23, 2006
* @version $Id$
*/
public class ConfigurableObjectDeserializationContext extends DeserializationContext {
private Class<?> objectClass = null;
private Object value = null;
public ConfigurableObjectDeserializationContext(
MessageContext context, InputSource source, Class<?> clazz) {
super(context, new SOAPHandler());
this.inputSource = source;
this.objectClass = clazz;
}
public Object getValue() throws SAXException {
if (value == null) {
popElementHandler();
Deserializer deserializer = getDeserializerForClass(objectClass);
if (deserializer == null) {
throw new NullPointerException("No deserializer found for class " + objectClass.getName());
}
pushElementHandler(new EnvelopeHandler((SOAPHandler) deserializer));
parse();
value = deserializer.getValue();
}
return value;
}
}