tomj        2002/06/02 19:15:54

  Modified:    java/src/org/apache/axis/wsdl/toJava Utils.java
                        JavaSkelWriter.java JavaDeployWriter.java
  Log:
  Refactor common code in deploy writer and skeleton writer that determines
  the element QName of an operation.
  
  This fixes the interop doc/lit server side endpoints, as these endpoints were
  set up to use skeletons.
  
  Revision  Changes    Path
  1.35      +81 -17    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.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- Utils.java        30 May 2002 23:46:02 -0000      1.34
  +++ Utils.java        3 Jun 2002 02:15:53 -0000       1.35
  @@ -54,31 +54,34 @@
    */
   package org.apache.axis.wsdl.toJava;
   
  +import org.apache.axis.Constants;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.wsdl.symbolTable.MessageEntry;
  +import org.apache.axis.wsdl.symbolTable.SymbolTable;
  +import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.w3c.dom.Node;
  +import org.w3c.dom.NodeList;
  +
  +import javax.wsdl.BindingInput;
  +import javax.wsdl.BindingOperation;
  +import javax.wsdl.Fault;
  +import javax.wsdl.Input;
  +import javax.wsdl.Message;
  +import javax.wsdl.Operation;
  +import javax.wsdl.Part;
  +import javax.wsdl.QName;
  +import javax.wsdl.extensions.ExtensibilityElement;
  +import javax.wsdl.extensions.soap.SOAPBody;
   import java.io.File;
   import java.io.IOException;
  -
   import java.net.MalformedURLException;
   import java.net.URL;
  -
   import java.util.HashMap;
  +import java.util.Iterator;
  +import java.util.Map;
   import java.util.StringTokenizer;
   import java.util.Vector;
   
  -import javax.wsdl.Fault;
  -import javax.wsdl.Message;
  -import javax.wsdl.QName;
  -
  -import org.apache.axis.Constants;
  -
  -import org.apache.axis.utils.JavaUtils;
  -
  -import org.apache.axis.wsdl.symbolTable.SymbolTable;
  -import org.apache.axis.wsdl.symbolTable.TypeEntry;
  -import org.apache.axis.wsdl.symbolTable.MessageEntry;
  -
  -import org.w3c.dom.Node;
  -import org.w3c.dom.NodeList;
  -
   public class Utils extends org.apache.axis.wsdl.symbolTable.Utils {
       /**
        * Given a type, return the Java mapping of that type's holder.
  @@ -445,5 +448,66 @@
       public static boolean isPrimitiveType(TypeEntry type) {
           return TYPES.get(type.getName()) != null;
       } // isPrimitiveType
  +
  +    /**
  +     * Return the XML Element which will trigger a particular operation
  +     * or null if the default case (localPart equals operation name) will
  +     * work fine.
  +     * 
  +     * @param operation the operation
  +     * @return element QName for doc/lit operation or null
  +     */ 
  +    public static QName getOperationQName(BindingOperation bindingOper) {
  +        Operation operation = bindingOper.getOperation();
  +        String operationName = operation.getName();
  +        String javaOperName = JavaUtils.xmlNameToJava(operation.getName());
  +        QName elementQName = null;
  +
  +        // Get a namespace from the soap:body tag, if any
  +        // example:
  +        //   <soap:body namespace="this_is_what_we_want" ..>
  +        String ns = null;
  +        BindingInput bindInput = bindingOper.getBindingInput();
  +        if (bindInput != null) {
  +            Iterator it = bindInput.getExtensibilityElements().iterator();
  +            while (it.hasNext()) {
  +                ExtensibilityElement elem = (ExtensibilityElement) it.next();
  +                if (elem instanceof SOAPBody) {
  +                    SOAPBody body = (SOAPBody) elem;
  +                    ns = body.getNamespaceURI();
  +                    break;
  +                }
  +            }
  +        }
  +        // Get the qname from the first message part, if it is an element
  +        // example:
  +        //   <part name="paramters" element="ns:myelem">
  +        Input input = operation.getInput();
  +        if (input != null) {
  +            Map parts = input.getMessage().getParts();
  +            if (parts != null && !parts.isEmpty()) {
  +                Iterator i = parts.values().iterator();
  +                Part p = (Part) i.next();
  +                elementQName = p.getElementName();
  +            }
  +        }
  +        
  +        // NOTE: it is possible for someone to define a part as an element
  +        // while using rpc/encoded, which is wrong and we might want to catch it
  +        // here.
  +        
  +        // If we didn't find an element declared in the part (assume it's a
  +        // type), so the QName will be the operation name with the
  +        // namespace (if any) from the binding soap:body tag..
  +        if (elementQName == null) {
  +            // We don't need to even set the QName in the meta data if we don't
  +            // have a namespace or we didn't mangle the XML name to a java name
  +            if (ns != null || !javaOperName.equals(operationName)) {
  +                elementQName = new QName(ns, operationName);
  +            }
  +        }
  +
  +        return elementQName;
  +    }
   
   } // class Utils
  
  
  
  1.28      +15 -35    
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSkelWriter.java
  
  Index: JavaSkelWriter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaSkelWriter.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- JavaSkelWriter.java       31 May 2002 13:47:44 -0000      1.27
  +++ JavaSkelWriter.java       3 Jun 2002 02:15:53 -0000       1.28
  @@ -54,10 +54,13 @@
    */
   package org.apache.axis.wsdl.toJava;
   
  -import java.io.IOException;
  -
  -import java.util.Iterator;
  -import java.util.List;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.wsdl.symbolTable.BindingEntry;
  +import org.apache.axis.wsdl.symbolTable.Element;
  +import org.apache.axis.wsdl.symbolTable.Parameter;
  +import org.apache.axis.wsdl.symbolTable.Parameters;
  +import org.apache.axis.wsdl.symbolTable.SymbolTable;
  +import org.apache.axis.wsdl.symbolTable.TypeEntry;
   
   import javax.wsdl.Binding;
   import javax.wsdl.BindingInput;
  @@ -65,22 +68,13 @@
   import javax.wsdl.BindingOutput;
   import javax.wsdl.Operation;
   import javax.wsdl.OperationType;
  -import javax.wsdl.PortType;
  -
   import javax.wsdl.extensions.ExtensibilityElement;
  -
   import javax.wsdl.extensions.soap.SOAPBody;
   import javax.wsdl.extensions.soap.SOAPOperation;
  -
  -import org.apache.axis.utils.JavaUtils;
  -
  -import org.apache.axis.wsdl.symbolTable.BindingEntry;
  -import org.apache.axis.wsdl.symbolTable.Element;
  -import org.apache.axis.wsdl.symbolTable.Parameter;
  -import org.apache.axis.wsdl.symbolTable.Parameters;
  -import org.apache.axis.wsdl.symbolTable.PortTypeEntry;
  -import org.apache.axis.wsdl.symbolTable.SymbolTable;
  -import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import javax.xml.rpc.namespace.QName;
  +import java.io.IOException;
  +import java.util.Iterator;
  +import java.util.List;
   
   /**
   * This is Wsdl2java's skeleton writer.  It writes the <BindingName>Skeleton.java
  @@ -206,29 +200,15 @@
                   pw.println("        _oper = new 
org.apache.axis.description.OperationDesc(\"" +
                               javaOpName + "\", _params, " + returnStr + ");");
   
  -                String ns = "";
  -                BindingInput input = operation.getBindingInput();
  -                if (input != null) {
  -                    List elems = input.getExtensibilityElements();
  -                    Iterator it = elems.iterator();
  -                    while (it.hasNext()) {
  -                        ExtensibilityElement elem = (ExtensibilityElement) 
it.next();
  -                        if (elem instanceof SOAPBody) {
  -                            SOAPBody body = (SOAPBody) elem;
  -                            ns = body.getNamespaceURI();
  -                            break;
  -                        }
  -                    }
  -                }
   
                   // If we need to know the QName (if we have a namespace or
                   // the actual method name doesn't match the XML we expect),
                   // record it in the OperationDesc
  -                if (!"".equals(ns) || !javaOpName.equals(opName)) {
  -                    javax.xml.rpc.namespace.QName qn =
  -                            new javax.xml.rpc.namespace.QName(ns, opName);
  +                QName elementQName = Utils.getAxisQName(
  +                        Utils.getOperationQName(operation));
  +                if (elementQName != null) {
                       pw.println("        _oper.setElementQName(" +
  -                            Utils.getNewQName(qn) + ");");
  +                            Utils.getNewQName(elementQName) + ");");
                   }
   
                   // Find the SOAPAction.
  
  
  
  1.45      +16 -41    
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.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- JavaDeployWriter.java     31 May 2002 19:08:10 -0000      1.44
  +++ JavaDeployWriter.java     3 Jun 2002 02:15:53 -0000       1.45
  @@ -54,38 +54,31 @@
    */
   package org.apache.axis.wsdl.toJava;
   
  -import java.io.IOException;
  -
  -import java.util.Iterator;
  -import java.util.Map;
  -import java.util.Vector;
  -
  -import javax.wsdl.Binding;
  -import javax.wsdl.BindingOperation;
  -import javax.wsdl.Definition;
  -import javax.wsdl.Operation;
  -import javax.wsdl.OperationType;
  -import javax.wsdl.Port;
  -import javax.wsdl.QName;
  -import javax.wsdl.Service;
  -import javax.wsdl.Part;
  -import javax.wsdl.Input;
  -
   import org.apache.axis.Constants;
   import org.apache.axis.deployment.wsdd.WSDDConstants;
  -
   import org.apache.axis.utils.JavaUtils;
  -
   import org.apache.axis.wsdl.symbolTable.BindingEntry;
   import org.apache.axis.wsdl.symbolTable.CollectionType;
   import org.apache.axis.wsdl.symbolTable.DefinedElement;
   import org.apache.axis.wsdl.symbolTable.Element;
   import org.apache.axis.wsdl.symbolTable.Parameter;
   import org.apache.axis.wsdl.symbolTable.Parameters;
  -import org.apache.axis.wsdl.symbolTable.SchemaUtils;
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
   
  +import javax.wsdl.Binding;
  +import javax.wsdl.BindingOperation;
  +import javax.wsdl.Definition;
  +import javax.wsdl.Operation;
  +import javax.wsdl.OperationType;
  +import javax.wsdl.Port;
  +import javax.wsdl.QName;
  +import javax.wsdl.Service;
  +import java.io.IOException;
  +import java.util.Iterator;
  +import java.util.Map;
  +import java.util.Vector;
  +
   /**
   * This is Wsdl2java's deploy Writer.  It writes the deploy.java file.
   */
  @@ -309,32 +302,14 @@
                   Parameters params =
                           symbolTable.getOperationParameters(operation, "", bEntry);
                   if (params != null) {
  -                    QName elementQName = null;
                       QName returnQName = null;
  -
  -                    // Get the operation qname
  -                    Input input = operation.getInput();
  -                    if (input != null) {
  -                        Map parts = input.getMessage().getParts();
  -                        if (parts != null && !parts.isEmpty()) {
  -                            Iterator i = parts.values().iterator();
  -                            Part p = (Part) i.next();
  -                            elementQName = p.getElementName();
  -                        }
  -                        if (elementQName == null) {
  -                            // FIXME - get namespace from WSDL?
  -                            elementQName = new QName("", operationName);
  -                        }
  -                        QName defaultQName = new QName("", javaOperName);
  -                        if (defaultQName.equals(elementQName)) {
  -                            elementQName = null;
  -                        }
  -                    }
  +                    
  +                    // Get the operation QName
  +                    QName elementQName = Utils.getOperationQName(bindingOper);
   
                       // Get the operation's return QName
                       if (params.returnName != null)
                           returnQName = Utils.getWSDLQName(params.returnName);
  -
   
                       // Write the operation metadata
                       writeOperation(javaOperName, elementQName, returnQName,
  
  
  


Reply via email to