You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by gd...@apache.org on 2001/07/22 07:57:22 UTC
cvs commit: xml-axis/java/src/org/apache/axis/message EnvelopeHandler.java MessageElement.java
gdaniels 01/07/21 22:57:22
Modified: java/src/org/apache/axis/encoding
DeserializationContext.java
java/src/org/apache/axis/handlers DebugHandler.java
java/src/org/apache/axis/message EnvelopeHandler.java
MessageElement.java
Log:
Finish getValueAsType() support for MessageElements.
Note also that EnvelopeHandler is now a generic "container" SOAPHandler
who simply defers to an internal handler on the first child notification that
it receives. This is used by getValueAsType() to publish the recorded
MessageElement events through the deserialization context.
Turn the functionality of the DebugHandler back on.
Revision Changes Path
1.18 +1 -1 xml-axis/java/src/org/apache/axis/encoding/DeserializationContext.java
Index: DeserializationContext.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializationContext.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- DeserializationContext.java 2001/07/16 17:36:59 1.17
+++ DeserializationContext.java 2001/07/22 05:57:22 1.18
@@ -128,7 +128,7 @@
envelope.setRecorder(recorder);
envelope.setMessageType(messageType);
- pushElementHandler(new EnvelopeHandler());
+ pushElementHandler(new EnvelopeHandler(new EnvelopeBuilder()));
}
public DeserializationContext(InputSource is, MessageContext ctx,
1.18 +6 -6 xml-axis/java/src/org/apache/axis/handlers/DebugHandler.java
Index: DebugHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/DebugHandler.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- DebugHandler.java 2001/07/15 16:40:07 1.17
+++ DebugHandler.java 2001/07/22 05:57:22 1.18
@@ -81,15 +81,15 @@
"Debug");
if (header != null) {
- /*
- int debugVal =
- ((Integer)header
- .getValueAsType(SOAPTypeMappingRegistry.XSD_INT))
- .intValue();
+ Integer i = ((Integer)header
+ .getValueAsType(SOAPTypeMappingRegistry.XSD_INT));
+ if (i == null)
+ throw new AxisFault("Couldn't convert value to int");
+
+ int debugVal = i.intValue();
Debug.Print( 1, "Setting debug level to: " + debugVal );
Debug.setDebugLevel(debugVal);
header.setProcessed(true);
- */
}
}
catch( Exception e ) {
1.3 +8 -1 xml-axis/java/src/org/apache/axis/message/EnvelopeHandler.java
Index: EnvelopeHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/EnvelopeHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EnvelopeHandler.java 2001/07/16 17:37:02 1.2
+++ EnvelopeHandler.java 2001/07/22 05:57:22 1.3
@@ -13,6 +13,13 @@
public class EnvelopeHandler extends SOAPHandler
{
+ SOAPHandler realHandler;
+
+ public EnvelopeHandler(SOAPHandler realHandler)
+ {
+ this.realHandler = realHandler;
+ }
+
public SOAPHandler onStartChild(String namespace,
String localName,
String prefix,
@@ -20,6 +27,6 @@
DeserializationContext context)
throws SAXException
{
- return new EnvelopeBuilder();
+ return realHandler;
}
}
1.36 +17 -5 xml-axis/java/src/org/apache/axis/message/MessageElement.java
Index: MessageElement.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/MessageElement.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- MessageElement.java 2001/07/20 22:14:28 1.35
+++ MessageElement.java 2001/07/22 05:57:22 1.36
@@ -65,6 +65,7 @@
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.SOAPTypeMappingRegistry;
+import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.MessageContext;
import org.apache.axis.utils.Debug;
import org.apache.axis.utils.QName;
@@ -88,8 +89,6 @@
protected DeserializationContext context;
- // The java Object value of this element. This is either set by
- // deserialization, or by the user creating a message.
protected QName typeQName = null;
protected Vector qNameAttrs = null;
@@ -194,10 +193,23 @@
public SAX2EventRecorder getRecorder() { return recorder; }
public void setRecorder(SAX2EventRecorder rec) { recorder = rec; }
- public Object getValueAsType(QName type)
+ public Object getValueAsType(QName type) throws Exception
{
- // !!! TODO : Implement
- return null;
+ if (context == null)
+ throw new Exception(
+ "No deserialization context to use in getValueAsType()!");
+
+ TypeMappingRegistry tmr = context.getTypeMappingRegistry();
+ Deserializer dser = tmr.getDeserializer(type);
+ if (dser == null)
+ throw new Exception("No deserializer for requested type " +
+ type);
+
+ context.pushElementHandler(new EnvelopeHandler(dser));
+
+ publishToHandler(context);
+
+ return dser.getValue();
}
protected static class QNameAttr {