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 to...@apache.org on 2002/10/05 01:36:02 UTC

cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava Utils.java JavaStubWriter.java JavaFaultWriter.java JavaDeployWriter.java JavaDefinitionWriter.java JavaBeanFaultWriter.java

tomj        2002/10/04 16:36:02

  Modified:    java/src/org/apache/axis/wsdl/toJava Tag: interop4
                        Utils.java JavaStubWriter.java JavaFaultWriter.java
                        JavaDeployWriter.java JavaDefinitionWriter.java
                        JavaBeanFaultWriter.java
  Log:
  Work in progress for Faults - DOESN'T WORK YET.
  
  Now are collecting fault information in the SymbolTable, then using it in the writers.
  
  Glen and I are still working on it, checking in so we can work on it at home.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.58.4.2  +34 -0     xml-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java,v
  retrieving revision 1.58.4.1
  retrieving revision 1.58.4.2
  diff -u -r1.58.4.1 -r1.58.4.2
  --- Utils.java	1 Oct 2002 20:38:51 -0000	1.58.4.1
  +++ Utils.java	4 Oct 2002 23:36:02 -0000	1.58.4.2
  @@ -57,6 +57,7 @@
   import org.apache.axis.Constants;
   
   import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.Messages;
   
   import org.apache.axis.wsdl.symbolTable.BindingEntry;
   import org.apache.axis.wsdl.symbolTable.CollectionTE;
  @@ -78,8 +79,10 @@
   import javax.wsdl.Message;
   import javax.wsdl.Operation;
   import javax.wsdl.Part;
  +import javax.wsdl.BindingFault;
   import javax.wsdl.extensions.ExtensibilityElement;
   import javax.wsdl.extensions.soap.SOAPBody;
  +import javax.wsdl.extensions.soap.SOAPFault;
   
   import javax.xml.namespace.QName;
   import javax.xml.rpc.holders.BooleanHolder;
  @@ -269,6 +272,37 @@
           }
       } // isFaultComplex
   
  +    /**
  +     * Return the QName of a fault
  +     * 
  +     * Can return null if no parts in fault
  +     */ 
  +    public static QName getFaultQName(Fault fault, SOAPFault soapFault) {
  +        // get the name of the part - there can be only one!
  +        Message message = fault.getMessage();
  +        Map parts = message.getParts();
  +        // If no parts, skip it
  +        if (parts.size() == 0) {
  +            return null;
  +        }
  +                
  +        // We have 2 cases
  +        // - part is an element, use element name and namespace
  +        // - part is a type, use part name and binding namespace 
  +        Part part = (Part) parts.values().iterator().next();
  +                
  +        // Someone should have already made sure that
  +        // if use=literal, no use of namespace on the soap:fault
  +        // if use=encoded, no use of element on the part
  +        if (part.getTypeName() != null) {
  +            String namespace = soapFault.getNamespaceURI();
  +            // Now make a QName
  +            return new QName(namespace, part.getName());
  +        } else {
  +            // Use the element's QName for the fault
  +            return part.getElementName();
  +        }
  +    }
       /**
        * If the specified node represents a supported JAX-RPC enumeration,
        * a Vector is returned which contains the base type and the enumeration values.
  
  
  
  1.98.2.4  +37 -71    xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
  
  Index: JavaStubWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
  retrieving revision 1.98.2.3
  retrieving revision 1.98.2.4
  diff -u -r1.98.2.3 -r1.98.2.4
  --- JavaStubWriter.java	3 Oct 2002 15:00:55 -0000	1.98.2.3
  +++ JavaStubWriter.java	4 Oct 2002 23:36:02 -0000	1.98.2.4
  @@ -83,6 +83,7 @@
   import java.util.List;
   import java.util.Map;
   import java.util.Vector;
  +import java.util.ArrayList;
   
   /**
   * This is Wsdl2java's stub writer.  It writes the <BindingName>Stub.java
  @@ -196,9 +197,6 @@
               typeMappingCount++;
           }
           
  -        // Register fault/exception information
  -        writeFaultInfo(pw, portType);
  -
           pw.println("    }");
           pw.println();
           pw.println("    private org.apache.axis.client.Call createCall() throws java.rmi.RemoteException {");
  @@ -403,76 +401,40 @@
       /**
        * This function writes the regsiterFaultInfo API calls
        */
  -    private void writeFaultInfo(PrintWriter pw, PortType portType) throws IOException {
  -        // Where we remember which QName we have already written out
  -        Vector emitted = new Vector();
  -        // Get all the faults from all the operations
  -        List operations = portType.getOperations();
  -        for (int i = 0; i < operations.size(); ++i) {
  -            Operation operation = (Operation) operations.get(i);
  -            Map faults = operation.getFaults();
  -            BindingOperation bindOp = 
  -                    binding.getBindingOperation(operation.getName(), null, null);
  +    private void writeFaultInfo(PrintWriter pw, BindingOperation bindOp) throws IOException {
  +        Map faultMap = bEntry.getFaults();
  +        // Get the list of faults for this operation
  +        ArrayList faults = (ArrayList) faultMap.get(bindOp);
  +        
  +        // check for no faults
  +        if (faults == null) {
  +            return;
  +        }
  +        // For each fault, register its information
  +        for (Iterator faultIt = faults.iterator(); faultIt.hasNext();) {
  +            JavaDefinitionWriter.FaultInfo info = (JavaDefinitionWriter.FaultInfo) faultIt.next();
               
  -            if (faults != null) {
  -                Iterator it = faults.values().iterator();
  -                while (it.hasNext()) {
  -                    Fault fault = (Fault) it.next();
  -
  -                    // get the name of the part - there can be only one!
  -                    Message message = fault.getMessage();
  -                    Map parts = message.getParts();
  -                    // If no parts, skip it
  -                    if (parts.size() == 0) {
  -                        continue;
  -                    }
  -                    String partName = (String) parts.keySet().iterator().next();
  -
  -                    // Use the namespace in the binding for this fault
  -                    // NOTE: we do the same thing when writing the fault in JavaFaultWriter
  -                    BindingFault bindFault = bindOp.getBindingFault(fault.getName());
  -                    if (bindFault == null) {
  -                        throw new IOException(
  -                                Messages.getMessage("noBindingFault", 
  -                                  new String[] {fault.getName(), 
  -                                                bindOp.getName(), 
  -                                                binding.getQName().toString()}));
  -                    }
  -                    List extList = bindFault.getExtensibilityElements();
  -                    String namespace = "";
  -                    for (Iterator iterator = extList.iterator(); iterator.hasNext();) {
  -                        Object o = (Object) iterator.next();
  -                        if (o instanceof SOAPFault) {
  -                            SOAPFault sf = (SOAPFault) o;
  -                            namespace = sf.getNamespaceURI();
  -                        }
  -                    }
  -
  -                    // Now make a QName
  -                    QName qname = new QName(namespace, partName);
  -                    
  -                    if (emitted.contains(qname)) {
  -                        continue;
  -                    }
  -                    
  -                    // Remember that we have already registered this name
  -                    emitted.add(qname);
  -                    
  -                    // Get the Exception class name
  -                    String className = Utils.getFullExceptionName(fault, symbolTable);
  -                    
  -                    // Get the xmlType of the exception data
  -                    QName xmlType = Utils.getFaultDataType(fault, symbolTable);
  -
  -                    // output the registration API call
  -                    pw.print("      ((org.apache.axis.client.Service)service).registerFaultInfo(");
  -                     pw.print( Utils.getNewQName(qname) + ", ");
  -                     pw.print( className + ".class, ");
  -                     pw.print( Utils.getNewQName(xmlType) + ", ");
  -                     pw.print( Utils.isFaultComplex(fault, symbolTable));
  -                    pw.println(");");
  -                }
  +            Fault fault = info.fault;
  +            QName qname = Utils.getFaultQName(fault, info.soapFault);
  +            
  +            // if no parts in fault, skip it!
  +            if (qname == null) {
  +                continue;
               }
  +            
  +            // Get the Exception class name
  +            String className = Utils.getFullExceptionName(fault, symbolTable);
  +            
  +            // Get the xmlType of the exception data
  +            QName xmlType = Utils.getFaultDataType(fault, symbolTable);
  +            
  +            // output the registration API call
  +            pw.print("        _call.addFault(");
  +            pw.print( Utils.getNewQName(qname) + ", ");
  +            pw.print( className + ".class, ");
  +            pw.print( Utils.getNewQName(xmlType) + ", ");
  +            pw.print( Utils.isFaultComplex(fault, symbolTable));
  +            pw.println(");");
           }
       }
       
  @@ -640,6 +602,10 @@
           else {
               pw.println("        _call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);");
           }
  +
  +        // Register fault/exception information for this operation
  +        writeFaultInfo(pw, operation);
  +
   
           // SoapAction
           if (soapAction != null) {
  
  
  
  1.14.2.4  +9 -20     xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaFaultWriter.java
  
  Index: JavaFaultWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaFaultWriter.java,v
  retrieving revision 1.14.2.3
  retrieving revision 1.14.2.4
  diff -u -r1.14.2.3 -r1.14.2.4
  --- JavaFaultWriter.java	3 Oct 2002 17:56:35 -0000	1.14.2.3
  +++ JavaFaultWriter.java	4 Oct 2002 23:36:02 -0000	1.14.2.4
  @@ -81,7 +81,7 @@
   public class JavaFaultWriter extends JavaClassWriter {
       private Fault fault;
       private SymbolTable symbolTable;
  -    private BindingFault bindingFault;
  +    private SOAPFault soapFault;
   
       /**
        * Constructor.
  @@ -89,11 +89,11 @@
       protected JavaFaultWriter(Emitter emitter, 
                                 SymbolTable symbolTable, 
                                 Fault fault, 
  -                              BindingFault bindingFault) {
  +                              SOAPFault soapFault) {
           super(emitter, Utils.getFullExceptionName(fault, symbolTable), "fault");
           this.fault = fault;
           this.symbolTable = symbolTable;
  -        this.bindingFault = bindingFault;
  +        this.soapFault = soapFault;
       } // ctor
   
       /**
  @@ -109,23 +109,14 @@
       protected void writeFileBody(PrintWriter pw) throws IOException {
           Vector params = new Vector();
   
  -        String faultNamespace = "";
           boolean literal = false;
  -        // Have to get namespace and use information (literal/encoded) 
  -        // for fault from Binding.
  -        if (bindingFault != null) {
  -            List extList = bindingFault.getExtensibilityElements();
  -            for (Iterator iterator = extList.iterator(); iterator.hasNext();) {
  -                Object o = (Object) iterator.next();
  -                if (o instanceof SOAPFault) {
  -                    SOAPFault sf = (SOAPFault) o;
  -                    faultNamespace = sf.getNamespaceURI();
  -                    if ("literal".equalsIgnoreCase(sf.getUse())) {
  -                        literal = true;
  -                    }
  -                }
  +        // Have to get use information (literal/encoded) for fault from Binding.
  +        if (soapFault != null) {
  +            if ("literal".equalsIgnoreCase(soapFault.getUse())) {
  +                literal = true;
               }
           }
  +
           symbolTable.getParametersFromParts(params, 
                                   fault.getMessage().getOrderedParts(null), 
                                   literal, 
  @@ -182,12 +173,10 @@
           pw.println("    /**");
           pw.println("     * Writes the exception data to the faultDetails");
           pw.println("     */");
  -        pw.println("    public void writeDetails(org.apache.axis.encoding.SerializationContext context) throws java.io.IOException {");
  +        pw.println("    public void writeDetails(javax.xml.namespace.QName qname, org.apache.axis.encoding.SerializationContext context) throws java.io.IOException {");
           for (int i = 0; i < params.size(); i++) {
               Parameter param = (Parameter)params.get(i);
               String variable = param.getName();
  -            QName qname = new QName(faultNamespace, param.getQName().getLocalPart());
  -            pw.println("        javax.xml.namespace.QName qname = " + Utils.getNewQName(qname) + ";");
               pw.println("        context.serialize(qname, null, " + Utils.wrapPrimitiveType(param.getType(), variable) + ");");
           }
           pw.println("    }");
  
  
  
  1.65.2.2  +40 -12    xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java
  
  Index: JavaDeployWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDeployWriter.java,v
  retrieving revision 1.65.2.1
  retrieving revision 1.65.2.2
  diff -u -r1.65.2.1 -r1.65.2.2
  --- JavaDeployWriter.java	4 Oct 2002 13:06:07 -0000	1.65.2.1
  +++ JavaDeployWriter.java	4 Oct 2002 23:36:02 -0000	1.65.2.2
  @@ -60,6 +60,7 @@
   import java.util.Iterator;
   import java.util.Map;
   import java.util.Vector;
  +import java.util.ArrayList;
   
   import javax.wsdl.Binding;
   import javax.wsdl.BindingOperation;
  @@ -177,7 +178,7 @@
                   if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) {
                       continue;
                   }
  -                writeDeployPort(pw, myPort, myService);
  +                writeDeployPort(pw, myPort, myService, bEntry);
               }
           }
       } //writeDeployServices
  @@ -185,8 +186,10 @@
       /**
        * Write out bean mappings for each type
        */
  -    protected void writeDeployTypes(PrintWriter pw, Binding binding,
  -            boolean hasLiteral, boolean hasMIME) throws IOException {
  +    protected void writeDeployTypes(PrintWriter pw, 
  +                                    Binding binding,
  +                                    boolean hasLiteral, 
  +                                    boolean hasMIME) throws IOException {
           Vector types = symbolTable.getTypes();
   
           pw.println();
  @@ -275,9 +278,10 @@
       /**
        * Write out deployment and undeployment instructions for given WSDL port
        */
  -    protected void writeDeployPort(PrintWriter pw, Port port, Service service) throws IOException {
  -        Binding binding = port.getBinding();
  -        BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName());
  +    protected void writeDeployPort(PrintWriter pw, 
  +                                   Port port, 
  +                                   Service service, 
  +                                   BindingEntry bEntry) throws IOException {
           String serviceName = port.getName();
   
           boolean hasLiteral = bEntry.hasLiteral();
  @@ -310,8 +314,8 @@
               pw.println("      <parameter name=\"sendMultiRefs\" value=\"false\"/>");
           }
   
  -        writeDeployBinding(pw, binding);
  -        writeDeployTypes(pw, binding, hasLiteral, hasMIME);
  +        writeDeployBinding(pw, bEntry);
  +        writeDeployTypes(pw, bEntry.getBinding(), hasLiteral, hasMIME);
   
           pw.println("  </service>");
       } //writeDeployPort
  @@ -319,8 +323,9 @@
       /**
        * Write out deployment instructions for given WSDL binding
        */
  -    protected void writeDeployBinding(PrintWriter pw, Binding binding) throws IOException {
  -        BindingEntry bEntry = symbolTable.getBindingEntry(binding.getQName());
  +    protected void writeDeployBinding(PrintWriter pw, 
  +                                      BindingEntry bEntry) throws IOException {
  +        Binding binding = bEntry.getBinding();
           String className = bEntry.getName();
           if (emitter.isSkeletonWanted())
               className += "Skeleton";
  @@ -369,10 +374,16 @@
                           returnType = Utils.getXSIType(params.returnParam);
                       }
   
  +                    // Get the operations faults
  +                    Map faultMap = bEntry.getFaults();
  +                    ArrayList faults = null; 
  +                    if (faultMap != null) {
  +                        faults = (ArrayList) faultMap.get(bindingOper);
  +                    }
                       // Write the operation metadata
                       writeOperation(pw, javaOperName, elementQName, 
                                      returnQName, returnType,
  -                                   params, binding.getQName());
  +                                   params, binding.getQName(), faults);
                   }
               }
           }
  @@ -399,7 +410,8 @@
                                     QName returnQName,
                                     QName returnType,
                                     Parameters params,
  -                                  QName bindingQName) {
  +                                  QName bindingQName, 
  +                                  ArrayList faults) {
           pw.print("      <operation name=\"" + javaOperName + "\"");
           if (elementQName != null) {
               pw.print(" qname=\"" +
  @@ -443,6 +455,22 @@
                   pw.print(" mode=\"" + getModeString(param.getMode()) + "\"");
               }
               pw.println("/>");
  +        }
  +        if (faults != null) {
  +            for (Iterator iterator = faults.iterator(); iterator.hasNext();) {
  +                JavaDefinitionWriter.FaultInfo faultInfo = 
  +                        (JavaDefinitionWriter.FaultInfo) iterator.next();
  +                QName faultQName = Utils.getFaultQName(faultInfo.fault, 
  +                                                       faultInfo.soapFault);
  +                if (faultQName != null) {
  +                    String className = Utils.getFullExceptionName(faultInfo.fault, symbolTable);
  +                    pw.print("        <fault");
  +                    pw.print(" qname=\"" +
  +                             Utils.genQNameAttributeString(faultQName, "fns") + "\"");
  +                    pw.print(" class=\"" + className+ "\"");
  +                    pw.println("/>");
  +                }
  +            }
           }
   
           pw.println("      </operation>");
  
  
  
  1.10.4.4  +40 -69    xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDefinitionWriter.java
  
  Index: JavaDefinitionWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaDefinitionWriter.java,v
  retrieving revision 1.10.4.3
  retrieving revision 1.10.4.4
  diff -u -r1.10.4.3 -r1.10.4.4
  --- JavaDefinitionWriter.java	4 Oct 2002 13:06:07 -0000	1.10.4.3
  +++ JavaDefinitionWriter.java	4 Oct 2002 23:36:02 -0000	1.10.4.4
  @@ -62,6 +62,7 @@
   import java.util.List;
   import java.util.Map;
   import java.util.Vector;
  +import java.util.ArrayList;
   
   import javax.wsdl.Definition;
   import javax.wsdl.Fault;
  @@ -71,11 +72,13 @@
   import javax.wsdl.BindingFault;
   import javax.wsdl.Binding;
   import javax.wsdl.BindingOperation;
  +import javax.wsdl.extensions.soap.SOAPFault;
   
   import org.apache.axis.wsdl.gen.Generator;
   
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
   import org.apache.axis.wsdl.symbolTable.MessageEntry;
  +import org.apache.axis.wsdl.symbolTable.BindingEntry;
   import org.apache.axis.utils.Messages;
   
   /**
  @@ -111,15 +114,22 @@
        * The fault name is derived from the fault message name per JAX-RPC
        */
       private void writeFaults() throws IOException {
  -        HashMap faults = new HashMap();
  +        ArrayList faults = new ArrayList();
           collectFaults(definition, faults);
  +        
  +        // Fault classes we're actually writing (for dup checking)
  +        HashSet generatedFaults = new HashSet();
   
           // iterate over fault list, emitting code.
  -        Iterator fi = faults.entrySet().iterator();
  +        Iterator fi = faults.iterator();
           while (fi.hasNext()) {
  -            Map.Entry entry = (Map.Entry) fi.next();
  -            FaultInfo faultInfo = (FaultInfo) entry.getValue();
  +            FaultInfo faultInfo = (FaultInfo) fi.next();
               Fault fault = faultInfo.fault;
  +            String name = Utils.getFullExceptionName(fault, symbolTable);
  +            if (generatedFaults.contains(name)) {
  +                continue;
  +            }
  +            generatedFaults.add(name);
   
               // Generate the 'Simple' Faults.
               // The complexType Faults are automatically handled
  @@ -129,8 +139,7 @@
               boolean emitSimpleFault = true;
               if (me != null) {
                   Boolean complexTypeFault = (Boolean)
  -                    me.getDynamicVar(
  -                        JavaGeneratorFactory.COMPLEX_TYPE_FAULT);
  +                    me.getDynamicVar(JavaGeneratorFactory.COMPLEX_TYPE_FAULT);
                   if (complexTypeFault != null &&
                       complexTypeFault.booleanValue()) {
                       emitSimpleFault = false;
  @@ -142,7 +151,7 @@
                               new JavaFaultWriter(emitter, 
                                                   symbolTable, 
                                                   faultInfo.fault, 
  -                                                faultInfo.bindingFault); 
  +                                                faultInfo.soapFault); 
                       // Go write the file
                       writer.generate();
                   } catch (DuplicateFileException dfe) {
  @@ -156,16 +165,21 @@
       /**
        * Holder structure for fault information
        */ 
  -    public class FaultInfo {
  +    public static class FaultInfo {
  +        public FaultInfo(Fault fault, SOAPFault soapFault) {
  +            this.fault = fault;
  +            this.soapFault = soapFault;
  +        }
  +
           public Fault fault;
  -        public BindingFault bindingFault;
  +        public SOAPFault soapFault;
       }
  +
       /**
        * Collect all of the faults used in this definition.
        */
       private HashSet importedFiles = new HashSet();
  -    private void collectFaults(Definition def, Map faults) throws IOException {
  -        Vector faultList = new Vector();
  +    private void collectFaults(Definition def, ArrayList faults) throws IOException {
           Map imports = def.getImports();
           Object[] importValues = imports.values().toArray();
           for (int i = 0; i < importValues.length; ++i) {
  @@ -181,68 +195,25 @@
                   }
               }
           }
  -        Map portTypes = def.getPortTypes();
  -        Iterator pti = portTypes.values().iterator();
  -        // collect referenced faults in a list
  -        while (pti.hasNext()) {
  -            PortType portType = (PortType) pti.next();
  -            
  -            // Don't emit faults that are not referenced.
  -            if (symbolTable.getPortTypeEntry(portType.getQName()).
  -                    isReferenced()) {
  -                List operations = portType.getOperations();
  -                for (int i = 0; i < operations.size(); ++i) {
  -                    Operation operation = (Operation) operations.get(i);
  -                    Map opFaults = operation.getFaults();
  -                    Iterator fi = opFaults.values().iterator();
  -                    while (fi.hasNext()) {
  -                        Fault f = (Fault) fi.next();
  -                        String name = Utils.getFullExceptionName(
  -                                f,
  -                                symbolTable);
  -                        // prevent duplicates
  -                        if (! faultList.contains(name) ) {
  -                            faultList.add(name);
  -                            FaultInfo faultInfo = new FaultInfo();
  -                            faultInfo.fault = f;
  -                            faults.put(f.getName(), faultInfo);
  -                        }
  -                    }
  -                }
  -            }
  -        }
  -        
  -        // We now have a map of FullExceptionName -> FaultInfo
  -        // Now we traverse the bindings to fill in more info
  +
  +        // Traverse the bindings to find faults
           Map bindings = def.getBindings();
           Iterator bindi = bindings.values().iterator();
           while (bindi.hasNext()) {
               Binding binding = (Binding) bindi.next();
  -            
  -            if (symbolTable.getBindingEntry(binding.getQName()).isReferenced()) {
  -                List operations = binding.getBindingOperations();
  -                for (int i = 0; i < operations.size(); ++i) {
  -                    BindingOperation operation = (BindingOperation) operations.get(i);
  -                    Map bindFaults = operation.getBindingFaults();
  -                    Iterator fi = bindFaults.values().iterator();
  -                    while (fi.hasNext()) {
  -                        BindingFault bFault = (BindingFault) fi.next();
  -                        FaultInfo faultInfo = (FaultInfo) faults.get(bFault.getName());
  -                        if (faultInfo == null) {
  -                            // This should NOT happen!
  -                            throw new IOException(
  -                                    Messages.getMessage("noBindingFault",
  -                                      new String[] {bFault.getName(), 
  -                                              operation.getName(), 
  -                                              binding.getQName().toString()}));
  -                        }
  -                        faultInfo.bindingFault = bFault;
  -                        // put the updated entry back in the map
  -                        faults.put(bFault.getName(), faultInfo);
  -                    } // while
  -                } // for
  -            } // if binding referenced
  -        } // iterate bindings
  +            BindingEntry entry = symbolTable.getBindingEntry(binding.getQName());
  +            if (entry.isReferenced()) {
  +                // use the map of bindingOperation -> fault info
  +                // created in SymbolTable
  +                Map faultMap = entry.getFaults();
  +                Iterator it = faultMap.values().iterator();
  +                while (it.hasNext()) {
  +                    ArrayList list = (ArrayList) it.next();
  +                    // Accumulate total list of faults
  +                    faults.addAll(list);
  +                }
  +            }
  +        }
       } // collectFaults
       
   } // class JavaDefinitionWriter
  
  
  
  1.2.4.1   +32 -0     xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanFaultWriter.java
  
  Index: JavaBeanFaultWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanFaultWriter.java,v
  retrieving revision 1.2
  retrieving revision 1.2.4.1
  diff -u -r1.2 -r1.2.4.1
  --- JavaBeanFaultWriter.java	8 Aug 2002 15:17:11 -0000	1.2
  +++ JavaBeanFaultWriter.java	4 Oct 2002 23:36:02 -0000	1.2.4.1
  @@ -55,8 +55,13 @@
   package org.apache.axis.wsdl.toJava;
   
   import java.util.Vector;
  +import java.io.PrintWriter;
  +import java.io.IOException;
   
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.apache.axis.wsdl.symbolTable.Parameter;
  +
  +import javax.xml.namespace.QName;
   
   /**
    * This is Wsdl2java's Complex Faylt Writer.
  @@ -111,4 +116,31 @@
           return extendsText;
       }
   
  +    /**
  +     * Write the Exception serialization code
  +     * 
  +     * NOTE: This function is written in JavaFaultWriter.java also. 
  +     */ 
  +    protected void writeFileFooter(PrintWriter pw) throws IOException {
  +        // PROBLEM: we need to have the Exception class serialize itself
  +        // with the correct namespace, which can change depending on which
  +        // operation the exception is thrown from.  This event seems unlikely
  +        // so for the time being we will use the namespace from the first
  +        // binding operation we find, which is passed in as construction time
  +        // Note that bindingFault can be null if this fault is never referenced
  +        // in a binding (WSDL2Java --all switch).
  +
  +        // method that serializes this exception (writeDetail)
  +        pw.println();
  +        pw.println("    /**");
  +        pw.println("     * Writes the exception data to the faultDetails");
  +        pw.println("     */");
  +        pw.println("    public void writeDetails(javax.xml.namespace.QName qname, org.apache.axis.encoding.SerializationContext context) throws java.io.IOException {");
  +/*        pw.println("        javax.xml.namespace.QName qname = new QName();");
  +        pw.println("        context.serialize(qname, null, this);");
  +*/
  +        pw.println("    }");
  +        
  +        super.writeFileFooter(pw);
  +    } // writeFileFooter
   } // class JavaBeanFaultWriter