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/02 17:14:57 UTC

cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava JavaStubWriter.java

tomj        2002/10/02 08:14:56

  Modified:    java/src/org/apache/axis/message Tag: interop4
                        SOAPFaultDetailsBuilder.java
               java/src/org/apache/axis/wsdl/toJava Tag: interop4
                        JavaStubWriter.java
  Log:
  All tests in the simple-rpc-encoded.wsdl now pass against the Sun endpoint.
  
  Add some protective code to check for null.
  
  Emit the fault QNames using the namespace from the BindingFault, not the
  message namespace.  Don't emit register calls for duplicate QNames.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.2   +1 -1      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.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- SOAPFaultDetailsBuilder.java	2 Oct 2002 12:09:57 -0000	1.1.2.1
  +++ SOAPFaultDetailsBuilder.java	2 Oct 2002 15:14:56 -0000	1.1.2.2
  @@ -119,7 +119,7 @@
           Service service = (Service) msgContext.getProperty(Call.WSDL_SERVICE);
           if (service != null) {
               Service.FaultInfo info = service.getFaultInfoForQName(qn);
  -            if (info.cls != null) {
  +            if (info != null && info.cls != null) {
                   // Set the class
                   builder.setFaultClass(info.cls);
                   // register callback for the data, use the xmlType from fault info
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.98.2.2  +24 -5     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.1
  retrieving revision 1.98.2.2
  diff -u -r1.98.2.1 -r1.98.2.2
  --- JavaStubWriter.java	1 Oct 2002 20:38:51 -0000	1.98.2.1
  +++ JavaStubWriter.java	2 Oct 2002 15:14:56 -0000	1.98.2.2
  @@ -71,7 +71,9 @@
   import javax.wsdl.OperationType;
   import javax.wsdl.Part;
   import javax.wsdl.PortType;
  +import javax.wsdl.BindingFault;
   import javax.wsdl.extensions.soap.SOAPOperation;
  +import javax.wsdl.extensions.soap.SOAPFault;
   import javax.xml.namespace.QName;
   import java.io.IOException;
   import java.io.PrintWriter;
  @@ -402,11 +404,15 @@
        * This function returns the faults in an operation
        */
       private void writeFaultInfo(PrintWriter pw, PortType portType) {
  +        // 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);
               
               if (faults != null) {
                   Iterator it = faults.values().iterator();
  @@ -418,15 +424,28 @@
                       Map parts = message.getParts();
                       String partName = (String) parts.keySet().iterator().next();
   
  -                    // Hack alert!
  -                    // We need a QName for the exception part that we are going to
  -                    // serialize, but <part name=""> isn't NOT a QName - go figure
  -                    // So we will use the namespace of the Message, and the name of the part
  +                    // Use the namespace in the binding for this fault
                       // NOTE: we do the same thing when writing the fault in JavaFaultWriter
  -                    String namespace = message.getQName().getNamespaceURI();
  +                    BindingFault bindFault = bindOp.getBindingFault(fault.getName());
  +                    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);