You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by cs...@apache.org on 2006/02/22 17:31:27 UTC

svn commit: r379809 - in /beehive/trunk/system-controls: src/webservice/control/org/apache/beehive/controls/system/webservice/generator/ src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/ src/webservice/control/org/apache/beeh...

Author: cschoett
Date: Wed Feb 22 08:31:24 2006
New Revision: 379809

URL: http://svn.apache.org/viewcvs?rev=379809&view=rev
Log:
 - updated control generator to only generate valid java class names for web service controls
 - updated wsc to use soapaction if defined for an operation
 - some additional cleanup to wsdl processing


Added:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlTypes.java
      - copied, changed from r372277, beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java
Removed:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java
Modified:
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/GeneratorUtils.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/WebServiceControlGenerator.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/servicecontrol.vm
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/ComplexType.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/DomUtils.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/Wsdl.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlComplexTypes.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFault.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFaultList.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameter.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameterList.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOperation.java
    beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlUtils.java
    beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java
    beehive/trunk/system-controls/test/webservice/junit/build.xml

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/GeneratorUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/GeneratorUtils.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/GeneratorUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/GeneratorUtils.java Wed Feb 22 08:31:24 2006
@@ -200,6 +200,31 @@
     }
 
     /**
+     * Generate a Java class name from a service name.
+     *
+     * @param serviceName Service name.
+     * @return String.
+     */
+    static String serviceNameToClassName(String serviceName) {
+        char[] chars = serviceName.toCharArray();
+        StringBuilder className = new StringBuilder();
+        for (int i = 0; i < chars.length; i++) {
+            if (i == 0) {
+                className.append(Character.toUpperCase(chars[0]));
+            }
+            else {
+                if (chars[i] == '.') {
+                    className.append(Character.toUpperCase(chars[++i]));
+                }
+                else {
+                    className.append(chars[i]);
+                }
+            }
+        }
+        return className.toString();
+    }
+
+    /**
      * Generate a java package name from the specified namespace.
      *
      * @param namespace Namespace to generate package name from.

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/WebServiceControlGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/WebServiceControlGenerator.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/WebServiceControlGenerator.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/WebServiceControlGenerator.java Wed Feb 22 08:31:24 2006
@@ -139,6 +139,7 @@
             initializeVelocity();
         }
 
+        String wscClassName = GeneratorUtils.serviceNameToClassName(wsdl.getServiceName());
         VelocityContext context = new VelocityContext();
         context.put("controlPackageName", pkgName);
         context.put("serviceName", wsdl.getServiceName());
@@ -146,8 +147,9 @@
         context.put("wsdlPath", wsdlPath);
         context.put("methodList", methodList);
         context.put("portName", wsdl.getPortName());
+        context.put("wscClassName", wscClassName);
 
-        Writer jcxWriter = getJcxWriter(outputDir, pkgName, wsdl.getServiceName());
+        Writer jcxWriter = getJcxWriter(outputDir, pkgName, wscClassName);
 
         try {
             _velocityTemplate.merge(context, jcxWriter);

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/servicecontrol.vm
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/servicecontrol.vm?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/servicecontrol.vm (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/generator/servicecontrol.vm Wed Feb 22 08:31:24 2006
@@ -52,7 +52,7 @@
       service = "$serviceName",
       serviceTns="$serviceTns")
 @ServiceFactoryProvider(ServiceFactoryProviderType.APACHE_AXIS)
-public interface $serviceName
+public interface $wscClassName
     extends ServiceControl {
 
 #foreach($method in $methodList)

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/jaxrpc/GenericCall.java Wed Feb 22 08:31:24 2006
@@ -98,6 +98,7 @@
         _op = op;
         setOperationName(_op.getOperationName());
         setOperationStyle(_op.getSOAPBindingStyle(), _op.getSOAPParameterStyle(), _op.getSOAPBindingUse());
+        setSOAPAction(_op.getSOAPAction());
         setCallParameters(method);
         setCallReturnType(method.getReturnType());
         setFaults();
@@ -114,7 +115,7 @@
      * @throws java.rmi.RemoteException On error.
      */
     Object invoke(Object[] args) throws RemoteException {
-        Object result = null;
+        Object result;
         try {
         result = _call.invoke(processArgs(args));
         } catch (RemoteException re) {
@@ -415,5 +416,16 @@
             addFault(faultName, fault.getXmlType(), fault.isComplextType(),
                      _op.getSOAPBindingStyle(), _op.getSOAPBindingUse());
         }
+    }
+
+    /**
+     * Set the SOAPAction uri for the call.
+     * @param actionURIString
+     */
+    private void setSOAPAction(String actionURIString) {
+       if (actionURIString != null && !actionURIString.equals("")) {
+           _call.setProperty(Call.SOAPACTION_USE_PROPERTY, true);
+           _call.setProperty(Call.SOAPACTION_URI_PROPERTY, actionURIString);
+       }
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/ComplexType.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/ComplexType.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/ComplexType.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/ComplexType.java Wed Feb 22 08:31:24 2006
@@ -21,9 +21,9 @@
 import org.w3c.dom.Element;
 
 import javax.xml.namespace.QName;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Set;
 
 /*
  This looks a little scary, but isn't so bad.  Pretty much all that needs to be done here is to
@@ -40,19 +40,20 @@
 public final class ComplexType implements java.io.Serializable {
 
     private final HashMap<String, QName> _elements = new HashMap<String, QName>();
+    private final List<String> _elementNames = new ArrayList<String>();
     private final String _name;
-    private WsdlNamespaceResolver _resolver;
+    private WsdlTypes _wsdlTypes;
 
     /**
      * Create a new complex type for the specified element.
      *
      * @param type     DOM element of the complex type.
-     * @param resolver Namespace resolver instance.
+     * @param wsdlTypes Namespace resolver instance.
      */
-    ComplexType(Element type, WsdlNamespaceResolver resolver) {
+    ComplexType(Element type, WsdlTypes wsdlTypes) {
 
         _name = type.getAttribute("name");
-        _resolver = resolver;
+        _wsdlTypes = wsdlTypes;
 
         // annotation?, (simpleContent | complexContent
         // | ((group | all | choice | sequence)?, (attribute | attributeGroup)*, anyAttribute?))
@@ -77,7 +78,7 @@
         }
 
         // release the resolver, we don't need it after the parse is complete
-        _resolver = null;
+        _wsdlTypes = null;
     }
 
     /**
@@ -96,7 +97,7 @@
      * @return Xmltype of the element or null if element can not be found in the complex type.
      */
     public QName getElementType(String elementName) {
-        return _elements.get(elementName);
+        return _elements.get(elementName.toLowerCase());
     }
 
     /**
@@ -104,8 +105,8 @@
      *
      * @return Set.
      */
-    public Set<String> getElementNames() {
-        return _elements.keySet();
+    public List<String> getElementNames() {
+        return _elementNames;
     }
 
     /* ---- Private Methods --- */
@@ -144,7 +145,7 @@
 //        if (attribute.hasAttribute("wsdl:arrayType")) {
 //            String attributeName = attribute.getAttribute("ref");
 //            String arrayType = attribute.getAttribute("wsdl:arrayType");
-//            _elements.put(attributeName, _resolver.getTypeQName(arrayType));
+//            _elements.put(attributeName, _wsdlTypes.getTypeQName(arrayType));
 //        }
 //    }
 
@@ -235,7 +236,8 @@
         if (element.hasAttribute("name")) {
             String elementName = element.getAttribute("name");
             String elementType = element.getAttribute("type");
-            _elements.put(elementName, _resolver.getTypeQName(elementType));
+            _elements.put(elementName.toLowerCase(), _wsdlTypes.getTypeQName(elementType));
+            _elementNames.add(elementName);
         }
     }
 

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/DomUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/DomUtils.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/DomUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/DomUtils.java Wed Feb 22 08:31:24 2006
@@ -17,14 +17,13 @@
  */
 package org.apache.beehive.controls.system.webservice.wsdl;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Some simple DOM utility methods.
@@ -36,17 +35,17 @@
      * <code>null</code> if not found.</p>
      *
      * @param parent parent element
-     * @param name   name of the child element
+     * @param localName   name of the child element
      * @return child element
      */
-    public static Element getChildElementByName(Element parent, String name) {
+    static Element getChildElementByName(Element parent, String localName) {
         NodeList children = parent.getChildNodes();
 
         for (int i = 0; i < children.getLength(); i++) {
             Node node = children.item(i);
             if (node.getNodeType() == Node.ELEMENT_NODE) {
                 Element element = (Element) node;
-                if (element.getTagName().equals(name)) {
+                if (element.getLocalName().equals(localName)) {
                     return element;
                 }
             }
@@ -60,11 +59,11 @@
      * name. Returns an empty list if there are no such child
      * elements.</p>
      *
-     * @param parent parent element
-     * @param name   name of the child element
+     * @param parent    parent element
+     * @param localName Local name of the child element
      * @return child elements
      */
-    public static List<Element> getChildElementsByName(Element parent, String name) {
+    static List<Element> getChildElementsByName(Element parent, String localName) {
         List<Element> elements = new ArrayList<Element>();
 
         NodeList children = parent.getChildNodes();
@@ -73,7 +72,7 @@
             Node node = children.item(i);
             if (node.getNodeType() == Node.ELEMENT_NODE) {
                 Element element = (Element) node;
-                if (element.getTagName().equals(name)) {
+                if (element.getLocalName().equals(localName)) {
                     elements.add(element);
                 }
             }
@@ -83,97 +82,6 @@
     }
 
     /**
-     * <p>Returns the text value of a child element. Returns
-     * <code>null</code> if there is no child element found.</p>
-     *
-     * @param parent parent element
-     * @param name   name of the child element
-     * @return text value
-     */
-    static String getChildElementText(Element parent, String name) {
-        // Get children
-        List list = DomUtils.getChildElementsByName(parent, name);
-
-        if (list.size() == 1) {
-            Element child = (Element) list.get(0);
-
-            StringBuffer buf = new StringBuffer();
-
-            NodeList children = child.getChildNodes();
-            for (int i = 0; i < children.getLength(); i++) {
-                Node node = children.item(i);
-                if (node.getNodeType() == Node.TEXT_NODE ||
-                        node.getNodeType() == Node.CDATA_SECTION_NODE) {
-                    Text text = (Text) node;
-                    buf.append(text.getData().trim());
-                }
-            }
-
-            return buf.toString();
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * <p>Returns the text value of a child element. Returns
-     * <code>null</code> if there is no child element found.</p>
-     *
-     * @param element element
-     * @return text value
-     */
-    static String getElementText(Element element) {
-        StringBuffer buf = new StringBuffer();
-
-        NodeList children = element.getChildNodes();
-        for (int i = 0; i < children.getLength(); i++) {
-            Node node = children.item(i);
-            if (node.getNodeType() == Node.TEXT_NODE ||
-                    node.getNodeType() == Node.CDATA_SECTION_NODE) {
-                Text text = (Text) node;
-                buf.append(text.getData().trim());
-            }
-        }
-
-        return buf.toString();
-    }
-
-    /**
-     * <p>Returns an array of text values of a child element. Returns
-     * <code>null</code> if there is no child element found.</p>
-     *
-     * @param parent parent element
-     * @param name   name of the child element
-     * @return text value
-     */
-    static String[] getChildElementTextArr(Element parent, String name) {
-        // Get all the elements
-        List children = getChildElementsByName(parent, name);
-
-        String str[] = new String[children.size()];
-
-        for (int i = 0; i < children.size(); i++) {
-            Node child = (Node) children.get(i);
-
-            StringBuffer buf = new StringBuffer();
-
-            NodeList nodes = child.getChildNodes();
-            for (int j = 0; j < nodes.getLength(); j++) {
-                Node node = nodes.item(j);
-                if (node.getNodeType() == Node.TEXT_NODE ||
-                        node.getNodeType() == Node.CDATA_SECTION_NODE) {
-                    Text text = (Text) node;
-                    buf.append(text.getData().trim());
-                }
-            }
-
-            str[i] = buf.toString();
-        }
-
-        return str;
-    }
-
-    /**
      * <p>Retutns the value of the named attribute of the given
      * element. If there is no such attribute, returns null.</p>
      *
@@ -185,7 +93,8 @@
         Attr attribute = element.getAttributeNode(name);
         if (attribute == null) {
             return null;
-        } else {
+        }
+        else {
             return attribute.getValue();
         }
     }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/Wsdl.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/Wsdl.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/Wsdl.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/Wsdl.java Wed Feb 22 08:31:24 2006
@@ -41,9 +41,8 @@
     private Port _port;
     private final Definition _wsdlDefinition;
     private final Service _service;
-    private final WsdlNamespaceResolver _namespaceResolver;
+    private final WsdlTypes _wsdlTypes;
     private HashMap<String, WsdlOperation> _operationCache;
-    private WsdlComplexTypes _types;
 
     /**
      * Loads and parses the specified WSDL file.
@@ -81,8 +80,7 @@
             }
         }
 
-        _namespaceResolver = new WsdlNamespaceResolver(_wsdlDefinition);
-        _types = new WsdlComplexTypes(_wsdlDefinition, _namespaceResolver);
+        _wsdlTypes = new WsdlTypes(_wsdlDefinition);
         _operationCache = new HashMap<String, WsdlOperation>();
     }
 
@@ -114,8 +112,7 @@
                     + " is not defined in the service: " + serviceQName);
         }
 
-        _namespaceResolver = new WsdlNamespaceResolver(_wsdlDefinition);
-        _types = new WsdlComplexTypes(_wsdlDefinition, _namespaceResolver);
+        _wsdlTypes = new WsdlTypes(_wsdlDefinition);
         _operationCache = new HashMap<String, WsdlOperation>();
     }
 
@@ -125,7 +122,7 @@
      * @return WsdlComplexTypes instance.
      */
     public WsdlComplexTypes getComplexTypes() {
-        return _types;
+        return _wsdlTypes.getNamedComplexTypes();
     }
 
     /**
@@ -145,7 +142,7 @@
         PortType pt = b.getPortType();
         Operation op = pt.getOperation(operationName, null, null);
         if (op != null) {
-            WsdlOperation wop = new WsdlOperation(b, op, _wsdlDefinition, _namespaceResolver);
+            WsdlOperation wop = new WsdlOperation(b, op, _wsdlTypes);
             // cache the operation
             _operationCache.put(operationName, wop);
             return wop;

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlComplexTypes.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlComplexTypes.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlComplexTypes.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlComplexTypes.java Wed Feb 22 08:31:24 2006
@@ -20,7 +20,6 @@
 
 import org.w3c.dom.Element;
 
-import javax.wsdl.Definition;
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.schema.Schema;
 import java.util.HashMap;
@@ -35,12 +34,11 @@
 
     /**
      * Create a new instance, parse the WSDL file for named complex types.
-     * @param wsdl The WSDL definition.
-     * @param resolver Namespace resolver.
+     * @param wsdlTypes Namespace resolver.
      */
-    WsdlComplexTypes(Definition wsdl, WsdlNamespaceResolver resolver) {
+    WsdlComplexTypes(WsdlTypes wsdlTypes) {
 
-        List schemas = WsdlUtils.getSchemas(wsdl);
+        List schemas = wsdlTypes.getSchemas();
         for (Object o : schemas) {
             ExtensibilityElement schema = (ExtensibilityElement) o;
             Element schemaRoot = ((Schema) schema).getElement();
@@ -48,7 +46,7 @@
             List<Element> types = DomUtils.getChildElementsByName(schemaRoot, "complexType");
             for (Element t : types) {
                 String schemaTypeName = t.getAttribute("name");
-                _complexTypes.put(schemaTypeName, new ComplexType(t, resolver));
+                _complexTypes.put(schemaTypeName, new ComplexType(t, wsdlTypes));
             }
         }
     }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFault.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFault.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFault.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFault.java Wed Feb 22 08:31:24 2006
@@ -20,12 +20,12 @@
      *
      * @param name     QName of the parameter.
      * @param xmlType  XML type of the parameter.
-     * @param resolver
+     * @param wsdlTypes
      */
-    WsdlOpFault(String name, QName xmlType, boolean isComplex, WsdlNamespaceResolver resolver) {
+    WsdlOpFault(String name, QName xmlType, boolean isComplex, WsdlTypes wsdlTypes) {
 
-        _name = resolver.getTypeQName(name);
-        _elementFormQualified = resolver.isElementFormQualified(_name.getNamespaceURI());
+        _name = wsdlTypes.getTypeQName(name);
+        _elementFormQualified = wsdlTypes.isElementFormQualified(_name.getNamespaceURI());
         _xmlType = xmlType;
         _complexType = isComplex;
     }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFaultList.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFaultList.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFaultList.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpFaultList.java Wed Feb 22 08:31:24 2006
@@ -20,7 +20,6 @@
 
 import org.w3c.dom.Element;
 
-import javax.wsdl.Definition;
 import javax.wsdl.Fault;
 import javax.wsdl.Message;
 import javax.wsdl.Part;
@@ -28,24 +27,21 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
-import java.util.List;
 
 /**
  */
 public final class WsdlOpFaultList extends ArrayList<WsdlOpFault>
 {
 
-    private final Definition _wsdlDefinition;
-    private final WsdlNamespaceResolver _resolver;
+    private final WsdlTypes _wsdlTypes;
 
     /**
      * Constructor.
      *
-     * @param wsdlDefinition Wsdl definition.
+     * @param wsdlTypes
      */
-    WsdlOpFaultList(Definition wsdlDefinition, WsdlNamespaceResolver resolver) {
-        _wsdlDefinition = wsdlDefinition;
-        _resolver = resolver;
+    WsdlOpFaultList(WsdlTypes wsdlTypes) {
+        _wsdlTypes = wsdlTypes;
     }
 
     /**
@@ -75,20 +71,19 @@
         QName type = faultPart.getTypeName();
         if (type == null) {
             type = faultPart.getElementName();
-            Element schemaElement = WsdlUtils.findSchemaElement(type, _wsdlDefinition);
+            Element schemaElement = _wsdlTypes.findSchemaElement(type);
             assert schemaElement.hasAttribute("type");
-            type = _resolver.getTypeQName(schemaElement.getAttribute("type"));
+            type = _wsdlTypes.getTypeQName(schemaElement.getAttribute("type"));
             complexType = true;
         }
-        return new WsdlOpFault(fault.getName(), type, complexType, _resolver);
+        return new WsdlOpFault(fault.getName(), type, complexType, _wsdlTypes);
     }
 
     /**
      * private contstructor.
      */
     private WsdlOpFaultList() {
-        _wsdlDefinition = null;
-        _resolver = null;
+        _wsdlTypes = null;
     }
 
     /**

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameter.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameter.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameter.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameter.java Wed Feb 22 08:31:24 2006
@@ -1,7 +1,6 @@
 package org.apache.beehive.controls.system.webservice.wsdl;
 
 import org.w3c.dom.Element;
-
 import javax.xml.namespace.QName;
 
 /**
@@ -28,14 +27,14 @@
      * @param xmlType           XML type of the parameter.
      * @param schemaTypeElement The type element from the schema for this parameter,
      *                          will be null if xmlType is a built-in schema type.
-     * @param resolver
+     * @param wsdlTypes
      */
     WsdlOpParameter(String name, QName xmlType, Element schemaTypeElement,
-                    WsdlNamespaceResolver resolver) {
+                    WsdlTypes wsdlTypes) {
 
-        setName(name, resolver);
+        setName(name, wsdlTypes);
         _xmlType = xmlType;
-        _itemXmlType = getArrayItemType(schemaTypeElement, resolver);
+        _itemXmlType = getArrayItemType(schemaTypeElement, wsdlTypes);
         _isArray = _itemXmlType != null;
         _isHeader = false;
         _mode = ParameterMode.UNDEFINED;
@@ -48,39 +47,48 @@
      *
      * @param name     Name of the attribute, if a namespace ref is included it will be resolved.
      * @param e        The schema element which defines the XML type of this attribute.
-     * @param resolver
+     * @param wsdlTypes
      */
-    WsdlOpParameter(String name, Element e, WsdlNamespaceResolver resolver) {
+    WsdlOpParameter(String name, Element e, WsdlTypes wsdlTypes) {
 
-        this(e, resolver);
-        setName(name, resolver);
+        this(e, wsdlTypes);
+        setName(name, wsdlTypes);
     }
 
     /**
      * Create a new WsdlOpParameter for a complex schema type.
      *
      * @param e        The schema element which defines the XML type of this attribute.
-     * @param resolver
+     * @param wsdlTypes
      */
-    WsdlOpParameter(Element e, WsdlNamespaceResolver resolver) {
+    WsdlOpParameter(Element e, WsdlTypes wsdlTypes) {
 
         _mode = ParameterMode.UNDEFINED;
         _isArray = isArray(e);
         _isHeader = false;
 
         if (e.hasAttribute(WsdlUtils.NAME_ATTR) && e.hasAttribute(WsdlUtils.ELEMENT_TYPE_ATTR)) {
-            setName(e.getAttribute(WsdlUtils.NAME_ATTR), resolver);
-            _xmlType = resolver.getTypeQName(e.getAttribute(WsdlUtils.ELEMENT_TYPE_ATTR));
+            setName(e.getAttribute(WsdlUtils.NAME_ATTR), wsdlTypes);
+            _xmlType = wsdlTypes.getTypeQName(e.getAttribute(WsdlUtils.ELEMENT_TYPE_ATTR));
         }
         else {
             if (e.hasAttribute(WsdlUtils.ELEMENT_REF_ATTR)) {
-                _xmlType = resolver.getTypeQName(e.getAttribute(WsdlUtils.ELEMENT_REF_ATTR));
+                _xmlType = wsdlTypes.getTypeQName(e.getAttribute(WsdlUtils.ELEMENT_REF_ATTR));
                 _name = new QName("", _xmlType.getLocalPart());
             }
             else {
                 throw new RuntimeException("invalid element: " + e);
             }
         }
+
+        Element t = wsdlTypes.findSchemaType(_xmlType);
+        if (t != null && "complexType".equals(t.getLocalName())) {
+            QName aType = getArrayItemType(t, wsdlTypes);
+            if (aType != null) {
+                _isArray = true;
+                _xmlType = aType;
+            }
+        }
     }
 
     /**
@@ -154,7 +162,7 @@
      * @param type Either a complexType or a simpleType node from the schema.
      * @return The QName of the array's item type, null if the type is not an array,
      */
-    private QName getArrayItemType(Element type, WsdlNamespaceResolver resolver) {
+    private QName getArrayItemType(Element type, WsdlTypes wsdlTypes) {
 
         if (type == null || "simpleElement".equals(type.getLocalName())) {
             return null;
@@ -162,12 +170,12 @@
 
         Element sequence = DomUtils.getChildElementByName(type, "sequence");
         if (sequence != null) {
-            return getArrayItemTypeFromSequence(sequence, resolver);
+            return getArrayItemTypeFromSequence(sequence, wsdlTypes);
         }
 
-        Element complexContent =  DomUtils.getChildElementByName(type, "complexContent");
+        Element complexContent = DomUtils.getChildElementByName(type, "complexContent");
         if (complexContent != null) {
-            return getArrayItemTypeFromComplexContent(complexContent, resolver);
+            return getArrayItemTypeFromComplexContent(complexContent, wsdlTypes);
         }
 
         assert false : "Unexpected element type, expected 'sequence' or 'complexContent'";
@@ -177,10 +185,10 @@
     /**
      *
      * @param sequenceElement
-     * @param resolver
+     * @param wsdlTypes
      * @return QName
      */
-    private QName getArrayItemTypeFromSequence(Element sequenceElement, WsdlNamespaceResolver resolver) {
+    private QName getArrayItemTypeFromSequence(Element sequenceElement, WsdlTypes wsdlTypes) {
 
         Element element = DomUtils.getChildElementByName(sequenceElement, "element");
         if (element == null) {
@@ -189,16 +197,16 @@
         if (!isArray(element)) {
             return null;
         }
-        return resolver.getTypeQName(element.getAttribute("type"));
+        return wsdlTypes.getTypeQName(element.getAttribute("type"));
     }
 
     /**
      *
      * @param ccElement
-     * @param resolver
+     * @param wsdlTypes
      * @return QName
      */
-    private QName getArrayItemTypeFromComplexContent(Element ccElement, WsdlNamespaceResolver resolver) {
+    private QName getArrayItemTypeFromComplexContent(Element ccElement, WsdlTypes wsdlTypes) {
 
         Element restriction = DomUtils.getChildElementByName(ccElement, "restriction");
         if (restriction == null) {
@@ -219,7 +227,7 @@
         if (arrayType == null) {
             return null;
         }
-        return resolver.getTypeQName(arrayType);
+        return wsdlTypes.getTypeQName(arrayType);
     }
 
     /**
@@ -242,11 +250,11 @@
      * Set the name of this parameter.
      *
      * @param name     parameter name.
-     * @param resolver
+     * @param wsdlTypes
      */
-    void setName(String name, WsdlNamespaceResolver resolver) {
-        _name = resolver.getTypeQName(name);
-        _elementFormQualified = resolver.isElementFormQualified(_name.getNamespaceURI());
+    void setName(String name, WsdlTypes wsdlTypes) {
+        _name = wsdlTypes.getTypeQName(name);
+        _elementFormQualified = wsdlTypes.isElementFormQualified(_name.getNamespaceURI());
     }
 
     /**

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameterList.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameterList.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameterList.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOpParameterList.java Wed Feb 22 08:31:24 2006
@@ -21,7 +21,6 @@
 import org.w3c.dom.Element;
 
 import javax.wsdl.Binding;
-import javax.wsdl.Definition;
 import javax.wsdl.Operation;
 import javax.wsdl.Part;
 import java.util.ArrayList;
@@ -35,9 +34,8 @@
 public final class WsdlOpParameterList extends ArrayList<WsdlOpParameter>
 {
 
-    private final Definition _wsdlDefinition;
     private final Operation _operation;
-    private final WsdlNamespaceResolver _resolver;
+    private final WsdlTypes _wsdlTypes;
     private final HashSet<String> _headerNames;
 
     private WsdlOperation.SOAPParameterStyle _parameterStyle;
@@ -49,13 +47,11 @@
      *
      * @param op             Operation this arg list is for.
      * @param binding        Binding for the operation.
-     * @param wsdlDefinition Wsdl definition.
+     * @param wsdlTypes
      */
-    WsdlOpParameterList(Operation op, Binding binding,
-                        Definition wsdlDefinition, WsdlNamespaceResolver resolver) {
+    WsdlOpParameterList(Operation op, Binding binding, WsdlTypes wsdlTypes) {
 
-        _wsdlDefinition = wsdlDefinition;
-        _resolver = resolver;
+        _wsdlTypes = wsdlTypes;
         _returnParam = null;
         _operation = op;
         _parameterStyle = WsdlOperation.SOAPParameterStyle.BARE;
@@ -123,11 +119,14 @@
             if (WsdlUtils.isWrappedParameterStyle(_operation.getName(), !requesPart, part.getName())) {
                 _parameterStyle = WsdlOperation.SOAPParameterStyle.WRAPPED;
             }
-            params.addAll(resolvePartElement(part));
+            WsdlOpParameter param = resolvePartElement(part);
+            if (param != null) {
+                params.add(param);
+            }
         }
         else {
             params.add(new WsdlOpParameter(part.getName(), part.getTypeName(),
-                                           WsdlUtils.findSchemaType(part.getTypeName(), _wsdlDefinition), _resolver));
+                                           _wsdlTypes.findSchemaType(part.getTypeName()), _wsdlTypes));
         }
         return params;
     }
@@ -203,8 +202,7 @@
      * private contstructor.
      */
     private WsdlOpParameterList() {
-        _wsdlDefinition = null;
-        _resolver = null;
+        _wsdlTypes = null;
         _operation = null;
         _headerNames = null;
     }
@@ -232,41 +230,38 @@
      * value to a concrete XML type.
      *
      * @param p A message part.
-     * @return A list of parameters resulting from the schema type -- typically the list will only
-     *         contains a single parameter.
+     * @return The wsdl parameter, value may be null if no parameter defined for this part.
      */
-    private List<WsdlOpParameter> resolvePartElement(Part p) {
+    private WsdlOpParameter resolvePartElement(Part p) {
 
-        ArrayList<WsdlOpParameter> resolvedParams = new ArrayList<WsdlOpParameter>();
-        Element schemaElement = WsdlUtils.findSchemaElement(p.getElementName(), _wsdlDefinition);
+        Element schemaElement = _wsdlTypes.findSchemaElement(p.getElementName());
 
-        if (schemaElement.hasAttribute("type")) {
+        if (schemaElement.hasAttribute(WsdlUtils.ELEMENT_TYPE_ATTR)) {
             // this is a simple type
-            resolvedParams.add(new WsdlOpParameter(p.getName(), schemaElement, _resolver));
+            return new WsdlOpParameter(p.getName(), schemaElement, _wsdlTypes);
         }
         else {
             // this is a complex type
-            Element complex = DomUtils.getChildElementByName(schemaElement, "complexType");
-            Element sequence = DomUtils.getChildElementByName(complex, "sequence");
+            Element complex = DomUtils.getChildElementByName(schemaElement, WsdlUtils.COMPLEX_TYPE_NAME);
+            Element sequence = DomUtils.getChildElementByName(complex, WsdlUtils.SEQUENCE_TAG_NAME);
 
-            // may occaisionally find a <complex/> tag map to empty but this may be a bug in WSM
+            // may occaisionally find a <complex/> tag - map to empty
             if (sequence == null) {
-                return resolvedParams;
+                return null;
             }
 
-            List<Element> seqElements = DomUtils.getChildElementsByName(sequence, "element");
-
-            for (Element e : seqElements) {
-                WsdlOpParameter op = new WsdlOpParameter(e, _resolver);
+            Element e = DomUtils.getChildElementByName(sequence, WsdlUtils.ELEMENT_NAME);
+            if (e != null) {
+                WsdlOpParameter op = new WsdlOpParameter(e, _wsdlTypes);
 
                 // special case for bare arrays, change the name of the param
                 // to the name of the complex type.
                 if (op.isArray() && _parameterStyle == WsdlOperation.SOAPParameterStyle.BARE) {
-                    op.setName(schemaElement.getAttribute("name"), _resolver);
+                    op.setName(schemaElement.getAttribute(WsdlUtils.NAME_ATTR), _wsdlTypes);
                 }
-                resolvedParams.add(op);
+                return op;
             }
         }
-        return resolvedParams;
+        return null;
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOperation.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOperation.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOperation.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlOperation.java Wed Feb 22 08:31:24 2006
@@ -18,7 +18,6 @@
 package org.apache.beehive.controls.system.webservice.wsdl;
 
 import javax.wsdl.Binding;
-import javax.wsdl.Definition;
 import javax.wsdl.Fault;
 import javax.wsdl.Input;
 import javax.wsdl.Message;
@@ -32,39 +31,36 @@
 /**
  * WSDL Operation abstraction used by webservice control.
  */
-public final class WsdlOperation implements java.io.Serializable
-{
+public final class WsdlOperation implements java.io.Serializable {
 
     /**
      * Parameter style enumeration.
      */
-    public enum SOAPParameterStyle
-    {
+    public enum SOAPParameterStyle {
         BARE, WRAPPED
     }
 
     /**
      * SOAP Binding style enumeration.
      */
-    public enum SOAPBindingStyle
-    {
+    public enum SOAPBindingStyle {
         DOCUMENT, RPC
     }
 
     /**
      * SOAP Binding use enumeration.
      */
-    public enum SOAPBindingUse
-    {
+    public enum SOAPBindingUse {
         LITERAL, ENCODED
     }
 
     private final SOAPBindingStyle _bindingStyle;
     private final SOAPBindingUse _bindingUse;
+    private final WsdlOpFaultList _faults;
     private final QName _operationName;
     private final WsdlOpParameterList _params;
-    private final WsdlOpFaultList _faults;
     private final SOAPParameterStyle _parameterStyle;
+    private final String _soapAction;
     private final WsdlOpReturnType _returnType;
 
     private boolean _oneway;
@@ -75,13 +71,11 @@
      *
      * @param binding        Binding for the operation.
      * @param op             The operation.
-     * @param wsdlDefinition
-     * @param resolver
+     * @param wsdlTypes
      */
-    WsdlOperation(Binding binding, Operation op,
-                  Definition wsdlDefinition, WsdlNamespaceResolver resolver) {
+    WsdlOperation(Binding binding, Operation op, WsdlTypes wsdlTypes) {
 
-        _operationName = new QName(resolver.getTargetNamespace(), op.getName());
+        _operationName = new QName(wsdlTypes.getTargetNamespace(), op.getName());
         _oneway = true;
 
         String soapBindingStyle = WsdlUtils.getSOAPBindingStyle(binding);
@@ -100,10 +94,12 @@
             _bindingUse = SOAPBindingUse.LITERAL;
         }
 
-        _params = new WsdlOpParameterList(op, binding, wsdlDefinition, resolver);
+        _soapAction = WsdlUtils.getSOAPAction(binding.getBindingOperation(op.getName(), null, null));
+
+        _params = new WsdlOpParameterList(op, binding, wsdlTypes);
         loadParameters(op);
 
-        _faults = new WsdlOpFaultList(wsdlDefinition, resolver);
+        _faults = new WsdlOpFaultList(wsdlTypes);
         loadFaults(op);
 
         _returnType = _params.getReturnType();
@@ -126,6 +122,15 @@
      */
     public QName getOperationName() {
         return _operationName;
+    }
+
+    /**
+     * Get the SOAP action uri for this operation.
+     *
+     * @return String, null if SOAPAction not defined for this operation.
+     */
+    public String getSOAPAction() {
+        return _soapAction;
     }
 
     /**

Copied: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlTypes.java (from r372277, beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java)
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlTypes.java?p2=beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlTypes.java&p1=beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java&r1=372277&r2=379809&rev=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlNamespaceResolver.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlTypes.java Wed Feb 22 08:31:24 2006
@@ -21,33 +21,113 @@
 import org.w3c.dom.Element;
 
 import javax.wsdl.Definition;
+import javax.wsdl.Types;
+import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.schema.Schema;
 import javax.xml.namespace.QName;
+import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.io.Serializable;
 
 /**
  */
-public final class WsdlNamespaceResolver implements Serializable
-{
+public final class WsdlTypes implements Serializable {
 
+    private final String _targetNamespace;
+    private final Types _wsdlTypes;
     private HashSet<String> _elementFormQualifiedNamespaces;
     private Map/*<String, String>*/ _prefixMappings;
-    private String _targetNamespace;
+    private WsdlComplexTypes _namedComplexTypes;
 
+    /**
+     * Create a new namespace resolver for the specified wsdl definition.
+     *
+     * @param wsdlDefinition
+     */
+    protected WsdlTypes(Definition wsdlDefinition) {
 
-    WsdlNamespaceResolver(Definition wsdlDefinition) {
-
+        _wsdlTypes = wsdlDefinition.getTypes();
         _targetNamespace = wsdlDefinition.getTargetNamespace();
         _prefixMappings = wsdlDefinition.getNamespaces();
-        _elementFormQualifiedNamespaces =
-                new HashSet<String>(getElementFormQualifiedNamespaces(wsdlDefinition));
+        _elementFormQualifiedNamespaces = new HashSet<String>(getElementFormQualifiedNamespaces());
+        _namedComplexTypes = new WsdlComplexTypes(this);
+    }
+
+    /**
+     * Find the element in its schema from the types section of the WSDL.
+     *
+     * @param elementName Name of element to find.
+     * @return The element node.
+     * @throws IllegalArgumentException if element cannot be found in the schema.
+     */
+    protected Element findSchemaElement(QName elementName) {
+
+        Schema s = getSchema(elementName.getNamespaceURI());
+        Element schemaRoot = s.getElement();
+        List<Element> elements = DomUtils.getChildElementsByName(schemaRoot, WsdlUtils.ELEMENT_NAME);
+
+        Element schemaElement = null;
+        for (Element e : elements) {
+            String schemaElementName = e.getAttribute(WsdlUtils.NAME_ATTR);
+            if (elementName.getLocalPart().equals(schemaElementName)) {
+                schemaElement = e;
+                break;
+            }
+        }
+
+        if (schemaElement == null) {
+            throw new IllegalArgumentException("Could not find element in schema!");
+        }
+        return schemaElement;
+    }
+
+    /**
+     * Find a complex or simple type in the schema.
+     *
+     * @param typeName
+     * @return null if type not found.
+     */
+    protected Element findSchemaType(QName typeName) {
+
+        Schema s = getSchema(typeName.getNamespaceURI());
+        if (s == null) {
+            return null;
+        }
+
+        Element schemaRoot = s.getElement();
+        // get all simple and complex types defined at the top-level.
+        List<Element> types = DomUtils.getChildElementsByName(schemaRoot, WsdlUtils.COMPLEX_TYPE_NAME);
+        types.addAll(DomUtils.getChildElementsByName(schemaRoot, WsdlUtils.SIMPLE_TYPE_NAME));
+
+        Element schemaType = null;
+        for (Element t : types) {
+            String schemaTypeName = t.getAttribute(WsdlUtils.NAME_ATTR);
+            if (typeName.getLocalPart().equals(schemaTypeName)) {
+                schemaType = t;
+                break;
+            }
+        }
+        return schemaType;
     }
 
-    String getTargetNamespace() {
+    /**
+     *
+     * @return Wsdl's named complex types.
+     */
+    protected WsdlComplexTypes getNamedComplexTypes() {
+        return _namedComplexTypes;
+    }
+
+    /**
+     * Get the target namespace of the wsdl.
+     *
+     * @return String contianing the target namespace.
+     */
+    protected String getTargetNamespace() {
         return _targetNamespace;
     }
 
@@ -58,7 +138,7 @@
      * @param type Name of type.
      * @return A QName for the type name.
      */
-    QName getTypeQName(String type) {
+    protected QName getTypeQName(String type) {
 
         if (type.indexOf(':') > -1) {
             String prefix = type.substring(0, type.indexOf(':'));
@@ -71,10 +151,22 @@
     }
 
     /**
+     * Return a list of of all schemas defined by the WSDL definition.
+     *
+     * @return A list of  javax.wsdl.extension.schema.Schema elements.
+     */
+    protected List getSchemas() {
+        if (_wsdlTypes == null) {
+            return Collections.EMPTY_LIST;
+        }
+        return WsdlUtils.findExtensibilityElements(_wsdlTypes, WsdlUtils.SCHEMA_ELEMENT_NAME);
+    }
+
+    /**
      * @param namespaceURI
      * @return true if element form is qualified
      */
-    boolean isElementFormQualified(String namespaceURI) {
+    protected boolean isElementFormQualified(String namespaceURI) {
         return _elementFormQualifiedNamespaces.contains(namespaceURI);
     }
 
@@ -83,10 +175,10 @@
      *
      * @return All target namespaces for schemas defined in the WSDL which are element form qualified.
      */
-    private List<String> getElementFormQualifiedNamespaces(Definition wsdlDefinition) {
+    private List<String> getElementFormQualifiedNamespaces() {
 
         List<String> namespaces = new ArrayList<String>();
-        List schemas = WsdlUtils.getSchemas(wsdlDefinition);
+        List schemas = getSchemas();
         for (Object o : schemas) {
             Element schemaElement = ((Schema) o).getElement();
 
@@ -98,5 +190,30 @@
             }
         }
         return namespaces;
+    }
+
+    /**
+     * Get the schema with the specified target namespace.
+     *
+     * @param targetNamespace target namespace of the schema to get.
+     * @return null if not found.
+     */
+    private Schema getSchema(String targetNamespace) {
+
+        if (_wsdlTypes == null) {
+            return null;
+        }
+
+        List<ExtensibilityElement> schemas =
+                WsdlUtils.findExtensibilityElements(_wsdlTypes, "schema");
+
+        for (ExtensibilityElement e : schemas) {
+            Element schemaRoot = ((Schema) e).getElement();
+            String tns = schemaRoot.getAttribute("targetNamespace");
+            if (targetNamespace.equals(tns)) {
+                return (Schema) e;
+            }
+        }
+        return null;
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlUtils.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlUtils.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlUtils.java (original)
+++ beehive/trunk/system-controls/src/webservice/control/org/apache/beehive/controls/system/webservice/wsdl/WsdlUtils.java Wed Feb 22 08:31:24 2006
@@ -1,36 +1,32 @@
 package org.apache.beehive.controls.system.webservice.wsdl;
 
-import org.w3c.dom.Element;
-
 import javax.wsdl.Binding;
 import javax.wsdl.BindingInput;
 import javax.wsdl.BindingOperation;
 import javax.wsdl.BindingOutput;
-import javax.wsdl.Definition;
 import javax.wsdl.Port;
 import javax.wsdl.extensions.ElementExtensible;
 import javax.wsdl.extensions.ExtensibilityElement;
-import javax.wsdl.extensions.schema.Schema;
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.wsdl.extensions.soap.SOAPBinding;
 import javax.wsdl.extensions.soap.SOAPBody;
 import javax.wsdl.extensions.soap.SOAPHeader;
-import javax.xml.namespace.QName;
+import javax.wsdl.extensions.soap.SOAPOperation;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 
 /**
  */
-final class WsdlUtils
-{
+final class WsdlUtils {
 
     // extensibility element names
-    static final String SOAP_BINDING_ELEMENT_NAME = "binding";
+    private static final String SOAP_PORT_ADDRESS_NAME = "address";
+    private static final String SOAP_BINDING_ELEMENT_NAME = "binding";
+    private static final String SOAP_BODY_ELEMENT_NAME = "body";
+    private static final String SOAP_HEADER_ELEMENT_NAME = "header";
+    private static final String SOAP_OPERATION_ELEMENT_NAME = "operation";
     static final String SCHEMA_ELEMENT_NAME = "schema";
-    static final String SOAPBODY_ELEMENT_NAME = "body";
-    static final String SOAPHEADER_ELEMENT_NAME = "header";
 
     // return values
     static final String SOAP_BINDING_DEFAULT = "document";
@@ -41,6 +37,7 @@
     static final String ELEMENT_FORM_QUALIFIED = "qualified";
     static final String ELEMENT_NAME = "element";
     static final String COMPLEX_TYPE_NAME = "complexType";
+    static final String SEQUENCE_TAG_NAME = "sequence";
     static final String SIMPLE_TYPE_NAME = "simpleType";
     static final String NAME_ATTR = "name";
     static final String ELEMENT_TYPE_ATTR = "type";
@@ -50,27 +47,13 @@
 
 
     /**
-     * Return a list of of all schemas defined by the WSDL definition.
-     *
-     * @param wsdlDefinition
-     * @return A list of  javax.wsdl.extension.schema.Schema elements.
-     */
-    static List getSchemas(Definition wsdlDefinition) {
-
-        if (wsdlDefinition.getTypes() == null) {
-            return Collections.EMPTY_LIST;
-        }
-        return findExtensibilityElements(wsdlDefinition.getTypes(), SCHEMA_ELEMENT_NAME);
-    }
-
-    /**
      * Get the SOAP address location for the specified port.
      *
      * @param p Port.
      * @return String.
      */
     static String getSOAPAddress(Port p) {
-        ExtensibilityElement e = findExtensibilityElement(p, "address");
+        ExtensibilityElement e = findExtensibilityElement(p, SOAP_PORT_ADDRESS_NAME);
         return ((SOAPAddress) e).getLocationURI();
     }
 
@@ -113,7 +96,7 @@
         BindingInput bindingInput = bindingOperation.getBindingInput();
         if (bindingInput != null) {
             ExtensibilityElement soapBodyElem =
-                    WsdlUtils.findExtensibilityElement(bindingInput, SOAPBODY_ELEMENT_NAME);
+                    WsdlUtils.findExtensibilityElement(bindingInput, SOAP_BODY_ELEMENT_NAME);
             return ((SOAPBody) soapBodyElem).getUse();
         }
 
@@ -123,7 +106,7 @@
         BindingOutput bindingOutput = bindingOperation.getBindingOutput();
         if (bindingOutput != null) {
             ExtensibilityElement soapBodyElem =
-                    WsdlUtils.findExtensibilityElement(bindingOutput, SOAPBODY_ELEMENT_NAME);
+                    WsdlUtils.findExtensibilityElement(bindingOutput, SOAP_BODY_ELEMENT_NAME);
             return ((SOAPBody) soapBodyElem).getUse();
         }
 
@@ -131,6 +114,20 @@
     }
 
     /**
+     * Get the Soap Action URI from the operation's soap:operation extensiblity element.
+     *
+     * @param operation Operation to the the action uri from.
+     * @return Soap action uri as string, null if not defined.
+     */
+    static String getSOAPAction(BindingOperation operation) {
+        ExtensibilityElement e = findExtensibilityElement(operation, SOAP_OPERATION_ELEMENT_NAME);
+        if (e != null) {
+            return ((SOAPOperation) e).getSoapActionURI();
+        }
+        return null;
+    }
+
+    /**
      * Does this parameter have a parameter style of WRAPPED ? It does if the <tt>name</tt> attribute of
      * the part is NOT the same as its operation name.
      *
@@ -155,65 +152,6 @@
     }
 
     /**
-     * Find the element in its schema from the types section of the WSDL.
-     *
-     * @param elementName    Name of element to find.
-     * @param wsdlDefinition Wsdl definition.
-     * @return The element node.
-     * @throws IllegalArgumentException if element cannot be found in the schema.
-     */
-    static Element findSchemaElement(QName elementName, Definition wsdlDefinition) {
-
-        Schema s = getSchema(wsdlDefinition, elementName.getNamespaceURI());
-        Element schemaRoot = s.getElement();
-        List<Element> elements = DomUtils.getChildElementsByName(schemaRoot, ELEMENT_NAME);
-
-        Element schemaElement = null;
-        for (Element e : elements) {
-            String schemaElementName = e.getAttribute(NAME_ATTR);
-            if (elementName.getLocalPart().equals(schemaElementName)) {
-                schemaElement = e;
-                break;
-            }
-        }
-
-        if (schemaElement == null) {
-            throw new IllegalArgumentException("Could not find element in schema!");
-        }
-        return schemaElement;
-    }
-
-    /**
-     *
-     * @param typeName
-     * @param wsdlDefinition
-     * @return  null if type not found.
-     */
-    static Element findSchemaType(QName typeName, Definition wsdlDefinition) {
-
-        Schema s = getSchema(wsdlDefinition, typeName.getNamespaceURI());
-        if (s == null) {
-            return null;
-        }
-
-        Element schemaRoot = s.getElement();
-        // get all simple and complex types defined at the top-level.
-        List<Element> types = DomUtils.getChildElementsByName(schemaRoot, COMPLEX_TYPE_NAME);
-        types.addAll(DomUtils.getChildElementsByName(schemaRoot, SIMPLE_TYPE_NAME));
-
-        Element schemaType = null;
-        for (Element t : types) {
-            String schemaTypeName = t.getAttribute(NAME_ATTR);
-            if (typeName.getLocalPart().equals(schemaTypeName)) {
-                schemaType = t;
-                break;
-            }
-        }
-        return schemaType;
-    }
-
-
-    /**
      * Build a HashSet of soap header names for the specified operation and binding.
      *
      * @param binding       Binding of the operation.
@@ -230,12 +168,12 @@
 
         BindingInput bindingInput = bindingOperation.getBindingInput();
         if (bindingInput != null) {
-            headers.addAll(WsdlUtils.findExtensibilityElements(bindingInput, SOAPHEADER_ELEMENT_NAME));
+            headers.addAll(WsdlUtils.findExtensibilityElements(bindingInput, SOAP_HEADER_ELEMENT_NAME));
         }
 
         BindingOutput bindingOutput = bindingOperation.getBindingOutput();
         if (bindingOutput != null) {
-            headers.addAll(WsdlUtils.findExtensibilityElements(bindingOutput, SOAPHEADER_ELEMENT_NAME));
+            headers.addAll(WsdlUtils.findExtensibilityElements(bindingOutput, SOAP_HEADER_ELEMENT_NAME));
         }
 
         HashSet<String> headerSet = new HashSet<String>(headers.size());
@@ -254,8 +192,8 @@
      * @param elementType       Name of the extensiblity element to find.
      * @return ExtensibilityElement
      */
-    private static ExtensibilityElement findExtensibilityElement(ElementExtensible extensibleElement,
-                                                                 String elementType) {
+    static ExtensibilityElement findExtensibilityElement(ElementExtensible extensibleElement,
+                                                         String elementType) {
 
         List extensibilityElements = extensibleElement.getExtensibilityElements();
         if (extensibilityElements != null) {
@@ -276,8 +214,8 @@
      * @param elementType Name of the extensiblity element to find.
      * @return List of ExtensibilityElements, may be empty.
      */
-    private static List<ExtensibilityElement> findExtensibilityElements(ElementExtensible extensibleElement,
-                                                                        String elementType) {
+    static List<ExtensibilityElement> findExtensibilityElements(ElementExtensible extensibleElement,
+                                                                String elementType) {
 
         ArrayList<ExtensibilityElement> elements = new ArrayList<ExtensibilityElement>();
         List extensibilityElements = extensibleElement.getExtensibilityElements();
@@ -292,31 +230,5 @@
             }
         }
         return elements;
-    }
-
-    /**
-     * Get the schema with the specified target namespace.
-     *
-     * @param wsdlDefinition  Wsdl definition.
-     * @param targetNamespace target namespace of the schema to get.
-     * @return null if not found.
-     */
-    private static Schema getSchema(Definition wsdlDefinition, String targetNamespace) {
-
-        if (wsdlDefinition.getTypes() == null) {
-            return null;
-        }
-
-        List<ExtensibilityElement> schemas =
-                WsdlUtils.findExtensibilityElements(wsdlDefinition.getTypes(), "schema");
-
-        for (ExtensibilityElement e : schemas) {
-            Element schemaRoot = ((Schema) e).getElement();
-            String tns = schemaRoot.getAttribute("targetNamespace");
-            if (targetNamespace.equals(tns)) {
-                return (Schema) e;
-            }
-        }
-        return null;
     }
 }

Modified: beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java (original)
+++ beehive/trunk/system-controls/src/webservice/jaxrpc-clients/axis/org/apache/beehive/controls/system/jaxrpc/AxisTypeRegistrar.java Wed Feb 22 08:31:24 2006
@@ -38,7 +38,7 @@
 import javax.xml.rpc.encoding.XMLType;
 import java.util.Collection;
 import java.util.Map;
-import java.util.Set;
+import java.util.List;
 
 /**
  * Axis client implementation of type registrar.
@@ -150,15 +150,15 @@
 
         ComplexType ct = _wsdlComplexTypes.getComplexType(xmlType.getLocalPart());
         if (ct != null) {
-            Set<String> names = ct.getElementNames();
+            List<String> names = ct.getElementNames();
             assert names.size() == 1;
-            QName componentQName = ct.getElementType(names.iterator().next());
+            QName componentQName = ct.getElementType(names.get(0));
             QName componentItemName;
             if (WsdlOperation.SOAPBindingStyle.RPC == style) {
-                componentItemName = new QName("", names.iterator().next());
+                componentItemName = new QName("", names.get(0));
             }
             else {
-                componentItemName = new QName(xmlType.getNamespaceURI(), names.iterator().next());
+                componentItemName = new QName(xmlType.getNamespaceURI(), names.get(0));
             }
             registerType(cls.getComponentType(), componentQName, style, use);
 

Modified: beehive/trunk/system-controls/test/webservice/junit/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/system-controls/test/webservice/junit/build.xml?rev=379809&r1=379808&r2=379809&view=diff
==============================================================================
--- beehive/trunk/system-controls/test/webservice/junit/build.xml (original)
+++ beehive/trunk/system-controls/test/webservice/junit/build.xml Wed Feb 22 08:31:24 2006
@@ -172,6 +172,7 @@
             <batchtest filtertrace="off" todir="${log.dir}">
                 <fileset dir="${junit-source.dir}">
                     <include name="**/*Test.java"/>
+                    <exclude name="**/WscGenFromDocLitWrapWsdlTest.java"/>
                 </fileset>
             </batchtest>
         </junit>