gdaniels 2002/10/03 07:46:16 Modified: java/src/org/apache/axis/message Tag: interop4 SOAPFaultDetailsBuilder.java SOAPFaultBuilder.java java/src/org/apache/axis/encoding/ser Tag: interop4 SimpleDeserializer.java java/src/org/apache/axis/encoding Tag: interop4 DeserializerImpl.java java/test/wsdl/interop4/groupH/simpleRPCenc Tag: interop4 build.xml Log: More work on fault tests. Make sure multi-ref deserialization of fault data works. Revision Changes Path No revision No revision 1.1.2.3 +2 -13 xml-axis/java/src/org/apache/axis/message/Attic/SOAPFaultDetailsBuilder.java Index: SOAPFaultDetailsBuilder.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/Attic/SOAPFaultDetailsBuilder.java,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- SOAPFaultDetailsBuilder.java 2 Oct 2002 15:14:56 -0000 1.1.2.2 +++ SOAPFaultDetailsBuilder.java 3 Oct 2002 14:46:15 -0000 1.1.2.3 @@ -54,7 +54,6 @@ */ package org.apache.axis.message; -import org.apache.axis.AxisFault; import org.apache.axis.Constants; import org.apache.axis.MessageContext; import org.apache.axis.client.Service; @@ -66,17 +65,10 @@ import org.apache.axis.utils.ClassUtils; import org.xml.sax.Attributes; import org.xml.sax.SAXException; -import org.w3c.dom.Element; -import org.w3c.dom.Text; import javax.xml.namespace.QName; -import java.util.HashMap; -import java.util.ArrayList; -import java.util.Iterator; -import java.lang.reflect.Constructor; - -/** +/** * Handle deserializing fault details. * * @author Glen Daniels ([EMAIL PROTECTED]) @@ -90,7 +82,6 @@ this.builder = builder; } - public SOAPHandler onStartChild(String namespace, String name, String prefix, @@ -98,8 +89,6 @@ DeserializationContext context) throws SAXException { - Deserializer currentDeser = null; - // Get QName of element QName qn = new QName(namespace, name); @@ -122,6 +111,7 @@ if (info != null && info.cls != null) { // Set the class builder.setFaultClass(info.cls); + builder.setWaiting(true); // register callback for the data, use the xmlType from fault info Deserializer dser = context.getDeserializerForType(info.xmlType); dser.registerValueTarget(new CallbackTarget(this, "faultData")); @@ -140,7 +130,6 @@ */ public void setValue(Object value, Object hint) { - String name = (String)hint; if ("faultData".equals(hint)) { builder.setFaultData(value); } else if ("exceptionName".equals(hint)) { 1.23.8.3 +30 -14 xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java Index: SOAPFaultBuilder.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java,v retrieving revision 1.23.8.2 retrieving revision 1.23.8.3 diff -u -r1.23.8.2 -r1.23.8.3 --- SOAPFaultBuilder.java 2 Oct 2002 14:53:56 -0000 1.23.8.2 +++ SOAPFaultBuilder.java 3 Oct 2002 14:46:15 -0000 1.23.8.3 @@ -56,24 +56,18 @@ import org.apache.axis.AxisFault; import org.apache.axis.Constants; -import org.apache.axis.MessageContext; -import org.apache.axis.client.Service; -import org.apache.axis.client.Call; import org.apache.axis.encoding.DeserializationContext; import org.apache.axis.encoding.Deserializer; import org.apache.axis.encoding.Callback; import org.apache.axis.encoding.CallbackTarget; -import org.apache.axis.utils.ClassUtils; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.w3c.dom.Element; -import org.w3c.dom.Text; import javax.xml.namespace.QName; import java.util.HashMap; import java.util.ArrayList; -import java.util.Iterator; import java.lang.reflect.Constructor; /** @@ -85,6 +79,9 @@ */ public class SOAPFaultBuilder extends SOAPHandler implements Callback { + boolean waiting = false; + boolean passedEnd = false; + protected SOAPFault element; protected DeserializationContext context; static HashMap fields = new HashMap(); @@ -113,6 +110,12 @@ void setFaultData(Object data) { faultData = data; + if (waiting && passedEnd) { + // This happened after the end of the <soap:Fault>, so make + // sure we set up the fault. + createFault(); + } + waiting = false; } public void setFaultClass(Class faultClass) { @@ -126,7 +129,21 @@ DeserializationContext context) throws SAXException { super.endElement(namespace, localName, context); - + if (!waiting) { + createFault(); + } else { + passedEnd = true; + } + } + + void setWaiting(boolean waiting) { + this.waiting = waiting; + } + + /** + * When we're sure we have everything, this gets called. + */ + private void createFault() { AxisFault f = null; if (faultClass != null) { // Custom fault handling @@ -139,10 +156,10 @@ // This is our exception class f = (AxisFault) faultData; } else { - // We need to create the exception, + // We need to create the exception, // passing the data to the constructor. Class argClass = ConvertWrapper(faultData.getClass()); - Constructor con = + Constructor con = faultClass.getConstructor( new Class[] { argClass }); f = (AxisFault) con.newInstance(new Object[] { faultData }); @@ -167,12 +184,12 @@ } if (f == null) { - f = new AxisFault(faultCode, - faultString, - faultActor, + f = new AxisFault(faultCode, + faultString, + faultActor, faultDetails); } - + element.setFault(f); } @@ -248,7 +265,6 @@ } else if (name.equals(Constants.ELEM_FAULT_ACTOR)) { faultActor = (String) value; } - } /** No revision No revision 1.28.2.1 +1 -0 xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java Index: SimpleDeserializer.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/SimpleDeserializer.java,v retrieving revision 1.28 retrieving revision 1.28.2.1 diff -u -r1.28 -r1.28.2.1 --- SimpleDeserializer.java 26 Sep 2002 13:58:01 -0000 1.28 +++ SimpleDeserializer.java 3 Oct 2002 14:46:15 -0000 1.28.2.1 @@ -213,6 +213,7 @@ } try { value = makeValue(val.toString()); + componentsReady = true; } catch (InvocationTargetException ite) { Throwable realException = ite.getTargetException(); if (realException instanceof Exception) No revision No revision 1.30.2.2 +1 -2 xml-axis/java/src/org/apache/axis/encoding/DeserializerImpl.java Index: DeserializerImpl.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializerImpl.java,v retrieving revision 1.30.2.1 retrieving revision 1.30.2.2 diff -u -r1.30.2.1 -r1.30.2.2 --- DeserializerImpl.java 1 Oct 2002 20:38:51 -0000 1.30.2.1 +++ DeserializerImpl.java 3 Oct 2002 14:46:15 -0000 1.30.2.2 @@ -62,7 +62,6 @@ import org.apache.axis.message.SAXOutputter; import org.apache.axis.message.SOAPHandler; import org.apache.axis.Part; -import org.apache.axis.utils.JavaUtils; import org.apache.axis.utils.Messages; import org.apache.axis.components.logger.LogFactory; @@ -99,7 +98,7 @@ protected Vector targets = null; protected QName defaultType = null; - private boolean componentsReady = true; + protected boolean componentsReady = true; /** No revision No revision 1.1.2.3 +4 -6 xml-axis/java/test/wsdl/interop4/groupH/simpleRPCenc/Attic/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/xml-axis/java/test/wsdl/interop4/groupH/simpleRPCenc/Attic/build.xml,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -r1.1.2.2 -r1.1.2.3 --- build.xml 2 Oct 2002 16:29:09 -0000 1.1.2.2 +++ build.xml 3 Oct 2002 14:46:15 -0000 1.1.2.3 @@ -55,18 +55,16 @@ <mkdir dir="${build.dest}"/> -<!-- <copy file="SoapInteropImport1BindingImpl.java" overwrite="true"--> -<!-- todir="${root.dir}/build/work/test/wsdl/interop3/${testname}"/>--> -<!----> - + <copy file="SimpleRpcEncBindingImpl.java" overwrite="true" + todir="${root.dir}/build/work/test/wsdl/interop4/groupH/${testname}"/> <copy file="SimpleRpcEncServiceTestCase.java" todir="${root.dir}/build/work/test/wsdl/interop4/groupH/${testname}"/> - <!-- compile the skeletons --> + <!-- compile the code --> <javac srcdir="${build.dir}/work" destdir="${build.dest}" debug="on"> <classpath refid="classpath" /> - <include name="test/wsdl/interop4/groupH/simpleRPCenc/*.java" /> + <include name="test/wsdl/interop4/groupH/simpleRPCenc/groupH/*.java" /> </javac> </target>