You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2006/11/24 13:15:06 UTC

svn commit: r478855 [18/21] - in /webservices/jaxme/branches/MAVEN/jaxme-xs: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/ws/ src/main/java/org/apache/ws/jaxme/ src/main/java/org/apache/ws/jaxme...

Added: webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/WSDLTest.java
URL: http://svn.apache.org/viewvc/webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/WSDLTest.java?view=auto&rev=478855
==============================================================================
--- webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/WSDLTest.java (added)
+++ webservices/jaxme/branches/MAVEN/jaxme-xs/src/test/java/org/apache/ws/jaxme/xs/junit/WSDLTest.java Fri Nov 24 04:14:48 2006
@@ -0,0 +1,7159 @@
+/*
+ * Copyright 2003, 2004  The Apache Software Foundation
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+ package org.apache.ws.jaxme.xs.junit;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import junit.framework.TestCase;
+import org.apache.ws.jaxme.xs.XSContentHandler;
+import org.apache.ws.jaxme.xs.XSParser;
+import org.apache.ws.jaxme.xs.XSSchema;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.Attributes;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
+/** <p>A variety of WSDL schemas being tested.</p>
+ *
+ * @author Srinath Perera (hemapani@opensource.lk)
+ * @author Jeyakumaran.C (jkumaran@opensource.lk)
+ */
+public class WSDLTest extends TestCase {
+  private static final boolean parseBySax = false;
+  private static final boolean parseByDom = true;
+
+  public WSDLTest(String pArg0) {
+    super(pArg0);
+  }
+
+  /** <p>This is the actual parsing code.</p>
+   */
+  public void addTypes(org.w3c.dom.Element ele, Document pSoapDataTypes) throws SAXException {
+    Element element = pSoapDataTypes.getDocumentElement();
+    String namespace = element.getAttributeNS(null, "targetNamespace");
+    if (namespace == null  ||  namespace.length() == 0) {
+      throw new IllegalStateException("Namespace is not set");
+    }
+    XSParser parser = new XSParser();
+    parser.addImport(namespace, null, pSoapDataTypes);
+    XSSchema schema = parser.parse(ele);
+    assertNotNull(schema);
+    assertTrue(schema.getElements().length > 0);
+  }
+
+  private class FilterHandler implements ContentHandler {
+    private XSContentHandler xsContentHandler;
+    private List prefixes = new ArrayList();
+    private Locator locator;
+    private List schemas = new ArrayList();
+    private final Document myDataTypes;
+
+    public FilterHandler(Document pSoapDataTypes) {
+      myDataTypes = pSoapDataTypes;
+    }
+
+    public XSSchema[] getSchemas() {
+      return (XSSchema[]) schemas.toArray(new XSSchema[schemas.size()]);
+    }
+
+    public void startDocument() throws SAXException {
+    }
+
+    public void endDocument() throws SAXException {
+    }
+
+    public void characters(char[] pChars, int pOffset, int pLen) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.characters(pChars, pOffset, pLen);
+      }
+    }
+
+    public void ignorableWhitespace(char[] pChars, int pOffset, int pLen) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.ignorableWhitespace(pChars, pOffset, pLen);
+      }
+    }
+
+    public void endPrefixMapping(String pPrefix) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.endPrefixMapping(pPrefix);
+      }
+      int size = prefixes.size();
+      prefixes.remove(size-1);
+      prefixes.remove(size-2);
+    }
+
+    public void skippedEntity(String pEntity) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.skippedEntity(pEntity);
+      }
+    }
+
+    public void setDocumentLocator(Locator pLocator) {
+      if (xsContentHandler != null) {
+        xsContentHandler.setDocumentLocator(pLocator);
+      }
+      locator = pLocator;
+    }
+
+    public void processingInstruction(String pTarget, String pData) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.processingInstruction(pTarget, pData);
+      }
+    }
+
+    public void startPrefixMapping(String pPrefix, String pUri) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.startPrefixMapping(pPrefix, pUri);
+      }
+      prefixes.add(pPrefix);
+      prefixes.add(pUri);
+    }
+
+    public void endElement(String pNamespaceURI, String pLocalName, String pQName) throws SAXException {
+      if (xsContentHandler != null) {
+        xsContentHandler.endElement(pNamespaceURI, pLocalName, pQName);
+        if (XSParser.XML_SCHEMA_URI.equals(pNamespaceURI)  &&  "schema".equals(pLocalName)) {
+          for (int i = prefixes.size();  i > 0;  i -= 2) {
+            xsContentHandler.endPrefixMapping((String) prefixes.get(i-2));
+          }
+          xsContentHandler.endDocument();
+          schemas.add(xsContentHandler.getXSSchema());
+          xsContentHandler = null;
+        }
+      }
+    }
+
+    public void startElement(String pNamespaceURI, String pLocalName, String pQName,
+                              Attributes pAttr) throws SAXException {
+      if (xsContentHandler == null) {
+        if (XSParser.XML_SCHEMA_URI.equals(pNamespaceURI)  &&  "schema".equals(pLocalName)) {
+          XSParser parser = new XSParser();
+          Element element = myDataTypes.getDocumentElement();
+          String namespace = element.getAttributeNS(null, "targetNamespace");
+          if (namespace == null  ||  namespace.length() == 0) {
+            throw new IllegalStateException("Namespace is not set");
+          }
+          parser.addImport(namespace, soapDataTypes);
+          xsContentHandler = new XSParser().getXSContentHandler(null);
+          if (locator != null) {
+            xsContentHandler.setDocumentLocator(locator);
+          }
+          xsContentHandler.startDocument();
+          for (int i = 0;  i < prefixes.size();  i += 2) {
+            xsContentHandler.startPrefixMapping((String) prefixes.get(i), (String) prefixes.get(i+1));
+          }
+          xsContentHandler.startElement(pNamespaceURI, pLocalName, pQName, pAttr);
+        }
+      } else {
+        xsContentHandler.startElement(pNamespaceURI, pLocalName, pQName, pAttr);
+      }
+    }
+  }
+
+  public void parseBySax(String file, String name, Document pSoapDataTypes)
+      throws SAXException, ParserConfigurationException, IOException {
+    StringReader sr = new StringReader(file);
+    InputSource isource = new InputSource(sr);
+    isource.setSystemId(name);
+    SAXParserFactory spf = SAXParserFactory.newInstance();
+    spf.setValidating(false);
+    spf.setNamespaceAware(true);
+    SAXParser sp = spf.newSAXParser();
+    XMLReader xr = sp.getXMLReader();
+    FilterHandler fh = new FilterHandler(pSoapDataTypes);
+    xr.setContentHandler(fh);
+    xr.parse(isource);
+    assertTrue(fh.getSchemas().length > 0);
+  }
+
+  public void parseByDom(String file, String name, Document pSoapDataTypes)
+      throws SAXException, IOException, ParserConfigurationException {
+    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+    dbf.setValidating(false);
+    dbf.setNamespaceAware(true);
+    StringReader sr = new StringReader(file);
+    InputSource isource = new InputSource(sr);
+    isource.setSystemId(name);
+    Document doc = dbf.newDocumentBuilder().parse(isource);
+  
+    org.w3c.dom.Element root = doc.getDocumentElement();
+    NodeList nodes = null;
+            
+    if (root.getTagName() != null
+        && root.getTagName().endsWith("schema")) {
+      addTypes(root, pSoapDataTypes);
+    } else if(root.getTagName()!=null && root.getTagName().endsWith("definitions")) {
+      // search for 'types' element        
+      Node node = null;     
+      boolean found = false;
+      nodes = root.getChildNodes();
+      for (int i=0;  i < nodes.getLength();  i++) {
+        node = nodes.item(i);
+        if (node.getNodeName() != null &&
+            node.getNodeName().endsWith("types")) {
+          found=true;
+          break;       
+        }         
+      }
+      if (found) {
+        nodes = node.getChildNodes();
+        for(int i=0; i< nodes.getLength() ; i++ ){
+          node = nodes.item(i);
+          if (node.getNodeName()!=null && node.getNodeName().endsWith("schema")) {
+            addTypes((org.w3c.dom.Element) node, pSoapDataTypes);
+          }
+        }//found      
+      } else{
+        throw new IllegalStateException("I can not handle this. The parameter passed in -doc's root is not the schema or definition");
+      }
+    }
+  }
+
+  public void parseString(String file, String name) throws Exception{
+    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+    dbf.setValidating(false);
+    dbf.setNamespaceAware(true);
+    StringReader sr = new StringReader(soapDataTypes);
+    Document doc = dbf.newDocumentBuilder().parse(new InputSource(sr));
+    
+    // To get better error messages, parse with a special ContentHandler first
+    if (parseBySax) {
+      parseBySax(file, name, doc);
+    }
+
+    if (parseByDom) {
+      parseByDom(file, name, doc);
+    }
+  }
+
+  private static final String soapDataTypes =
+  "<?xml version='1.0' encoding='UTF-8' ?>\n" +
+  "\n" +
+  "<schema xmlns:tns='http://schemas.xmlsoap.org/soap/encoding/'\n" +
+  "        targetNamespace='http://schemas.xmlsoap.org/soap/encoding/' \n" +
+  " xmlns='http://www.w3.org/2001/XMLSchema'>\n" +
+  "        \n" +
+  " <attribute name='root' >\n" +
+  "   <annotation>\n" +
+  "     <documentation>\n" +
+  "    'root' can be used to distinguish serialization roots from other\n" +
+  "       elements that are present in a serialization but are not roots of\n" +
+  "       a serialized value graph \n" +
+  "  </documentation>\n" +
+  "   </annotation>\n" +
+  "   <simpleType>\n" +
+  "     <restriction base='boolean'>\n" +
+  "    <pattern value='0|1' />\n" +
+  "  </restriction>\n" +
+  "   </simpleType>\n" +
+  " </attribute>\n" +
+  "\n" +
+  "  <attributeGroup name='commonAttributes' >\n" +
+  "    <annotation>\n" +
+  "   <documentation>\n" +
+  "     Attributes common to all elements that function as accessors or \n" +
+  "        represent independent (multi-ref) values.  The href attribute is\n" +
+  "        intended to be used in a manner like CONREF.  That is, the element\n" +
+  "        content should be empty iff the href attribute appears\n" +
+  "   </documentation>\n" +
+  " </annotation>\n" +
+  "    <attribute name='id' type='ID' />\n" +
+  "    <attribute name='href' type='anyURI' />\n" +
+  "    <anyAttribute namespace='##other' processContents='lax' />\n" +
+  "  </attributeGroup>\n" +
+  "\n" +
+  " <simpleType name='arrayCoordinate' >\n" +
+  "    <restriction base='string' />\n" +
+  "  </simpleType>\n" +
+  "          \n" +
+  "  <attribute name='arrayType' type='string' />\n" +
+  "  <attribute name='offset' type='tns:arrayCoordinate' />\n" +
+  "  \n" +
+  "  <attributeGroup name='arrayAttributes' >\n" +
+  "    <attribute ref='tns:arrayType' />\n" +
+  "    <attribute ref='tns:offset' />\n" +
+  "  </attributeGroup>    \n" +
+  "  \n" +
+  "  <attribute name='position' type='tns:arrayCoordinate' /> \n" +
+  "  \n" +
+  "  <attributeGroup name='arrayMemberAttributes' >\n" +
+  "    <attribute ref='tns:position' />\n" +
+  "  </attributeGroup>    \n" +
+  "\n" +
+  "  <group name='Array' >\n" +
+  "    <sequence>\n" +
+  "      <any namespace='##any' minOccurs='0' maxOccurs='unbounded' processContents='lax' />\n" +
+  " </sequence>\n" +
+  "  </group>\n" +
+  "\n" +
+  "  <element name='Array' type='tns:Array' />\n" +
+  "  <complexType name='Array' >\n" +
+  "    <annotation>\n" +
+  "   <documentation>\n" +
+  "    'Array' is a complex type for accessors identified by position \n" +
+  "   </documentation>\n" +
+  " </annotation>\n" +
+  "    <group ref='tns:Array' minOccurs='0' />\n" +
+  "    <attributeGroup ref='tns:arrayAttributes' />\n" +
+  "    <attributeGroup ref='tns:commonAttributes' />\n" +
+  "  </complexType> \n" +
+  "\n" +
+  "  \n" +
+  "  <element name='Struct' type='tns:Struct' />\n" +
+  "\n" +
+  "  <group name='Struct' >\n" +
+  "    <sequence>\n" +
+  "      <any namespace='##any' minOccurs='0' maxOccurs='unbounded' processContents='lax' />\n" +
+  " </sequence>\n" +
+  "  </group>\n" +
+  "\n" +
+  "  <complexType name='Struct' >\n" +
+  "    <group ref='tns:Struct' minOccurs='0' />\n" +
+  "    <attributeGroup ref='tns:commonAttributes'/>\n" +
+  "  </complexType> \n" +
+  "\n" +
+  "\n" +
+  "  <simpleType name='base64' >\n" +
+  "    <restriction base='base64Binary' />\n" +
+  "  </simpleType>\n" +
+  "\n" +
+  "\n" +
+  "  <element name='duration' type='tns:duration' />\n" +
+  "  <complexType name='duration' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='duration' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='dateTime' type='tns:dateTime' />\n" +
+  "  <complexType name='dateTime' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='dateTime' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "\n" +
+  "\n" +
+  "  <element name='NOTATION' type='tns:NOTATION' />\n" +
+  "  <complexType name='NOTATION' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='QName' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "  \n" +
+  "\n" +
+  "  <element name='time' type='tns:time' />\n" +
+  "  <complexType name='time' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='time' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='date' type='tns:date' />\n" +
+  "  <complexType name='date' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='date' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='gYearMonth' type='tns:gYearMonth' />\n" +
+  "  <complexType name='gYearMonth' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='gYearMonth' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='gYear' type='tns:gYear' />\n" +
+  "  <complexType name='gYear' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='gYear' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='gMonthDay' type='tns:gMonthDay' />\n" +
+  "  <complexType name='gMonthDay' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='gMonthDay' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='gDay' type='tns:gDay' />\n" +
+  "  <complexType name='gDay' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='gDay' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='gMonth' type='tns:gMonth' />\n" +
+  "  <complexType name='gMonth' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='gMonth' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "  \n" +
+  "  <element name='boolean' type='tns:boolean' />\n" +
+  "  <complexType name='boolean' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='boolean' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='base64Binary' type='tns:base64Binary' />\n" +
+  "  <complexType name='base64Binary' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='base64Binary' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='hexBinary' type='tns:hexBinary' />\n" +
+  "  <complexType name='hexBinary' >\n" +
+  "    <simpleContent>\n" +
+  "     <extension base='hexBinary' >\n" +
+  "       <attributeGroup ref='tns:commonAttributes' />\n" +
+  "     </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='float' type='tns:float' />\n" +
+  "  <complexType name='float' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='float' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='double' type='tns:double' />\n" +
+  "  <complexType name='double' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='double' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='anyURI' type='tns:anyURI' />\n" +
+  "  <complexType name='anyURI' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='anyURI' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='QName' type='tns:QName' />\n" +
+  "  <complexType name='QName' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='QName' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  \n" +
+  "  <element name='string' type='tns:string' />\n" +
+  "  <complexType name='string' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='string' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='normalizedString' type='tns:normalizedString' />\n" +
+  "  <complexType name='normalizedString' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='normalizedString' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='token' type='tns:token' />\n" +
+  "  <complexType name='token' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='token' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='language' type='tns:language' />\n" +
+  "  <complexType name='language' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='language' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='Name' type='tns:Name' />\n" +
+  "  <complexType name='Name' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='Name' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='NMTOKEN' type='tns:NMTOKEN' />\n" +
+  "  <complexType name='NMTOKEN' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='NMTOKEN' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='NCName' type='tns:NCName' />\n" +
+  "  <complexType name='NCName' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='NCName' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='NMTOKENS' type='tns:NMTOKENS' />\n" +
+  "  <complexType name='NMTOKENS' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='NMTOKENS' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='ID' type='tns:ID' />\n" +
+  "  <complexType name='ID' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='ID' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='IDREF' type='tns:IDREF' />\n" +
+  "  <complexType name='IDREF' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='IDREF' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='ENTITY' type='tns:ENTITY' />\n" +
+  "  <complexType name='ENTITY' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='ENTITY' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='IDREFS' type='tns:IDREFS' />\n" +
+  "  <complexType name='IDREFS' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='IDREFS' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='ENTITIES' type='tns:ENTITIES' />\n" +
+  "  <complexType name='ENTITIES' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='ENTITIES' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='decimal' type='tns:decimal' />\n" +
+  "  <complexType name='decimal' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='decimal' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='integer' type='tns:integer' />\n" +
+  "  <complexType name='integer' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='integer' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='nonPositiveInteger' type='tns:nonPositiveInteger' />\n" +
+  "  <complexType name='nonPositiveInteger' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='nonPositiveInteger' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='negativeInteger' type='tns:negativeInteger' />\n" +
+  "  <complexType name='negativeInteger' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='negativeInteger' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='long' type='tns:long' />\n" +
+  "  <complexType name='long' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='long' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='int' type='tns:int' />\n" +
+  "  <complexType name='int' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='int' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='short' type='tns:short' />\n" +
+  "  <complexType name='short' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='short' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='byte' type='tns:byte' />\n" +
+  "  <complexType name='byte' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='byte' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='nonNegativeInteger' type='tns:nonNegativeInteger' />\n" +
+  "  <complexType name='nonNegativeInteger' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='nonNegativeInteger' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='unsignedLong' type='tns:unsignedLong' />\n" +
+  "  <complexType name='unsignedLong' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='unsignedLong' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='unsignedInt' type='tns:unsignedInt' />\n" +
+  "  <complexType name='unsignedInt' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='unsignedInt' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='unsignedShort' type='tns:unsignedShort' />\n" +
+  "  <complexType name='unsignedShort' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='unsignedShort' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='unsignedByte' type='tns:unsignedByte' />\n" +
+  "  <complexType name='unsignedByte' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='unsignedByte' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  "  <element name='positiveInteger' type='tns:positiveInteger' />\n" +
+  "  <complexType name='positiveInteger' >\n" +
+  "    <simpleContent>\n" +
+  "      <extension base='positiveInteger' >\n" +
+  "        <attributeGroup ref='tns:commonAttributes' />\n" +
+  "      </extension>\n" +
+  "    </simpleContent>\n" +
+  "  </complexType>\n" +
+  "\n" +
+  " </schema>\n";
+  
+  private static final String addressBook =
+  "<?xml version='1.0' ?>\n" +
+  "\n" +
+  "<definitions name='urn:AddrNoImplSEI'\n" +
+  "             targetNamespace='urn:AddrNoImplSEI'\n" +
+  "             xmlns:tns='urn:AddrNoImplSEI'\n" +
+  "             xmlns:typens='urn:AddrNoImplSEI'\n" +
+  "             xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
+  "             xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'\n" +
+  "             xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/'\n" +
+  "             xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'\n" +
+  "             xmlns='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  "\n" +
+  "  <!-- type defs -->\n" +
+  "  <types>\n" +
+  "    <xsd:schema targetNamespace='urn:AddrNoImplSEI'\n" +
+  "                xmlns:xsd='http://www.w3.org/2001/XMLSchema'>\n" +
+  "\n" +
+  "      <xsd:simpleType name='StateType'>\n" +
+  "        <xsd:restriction base='xsd:string'>\n" +
+  "            <xsd:enumeration value='TX'/>                      \n" +
+  "            <xsd:enumeration value='IN'/>                    \n" +
+  "            <xsd:enumeration value='OH'/>                    \n" +
+  "        </xsd:restriction>\n" +
+  "      </xsd:simpleType>\n" +
+  "\n" +
+  "      <xsd:element name='Phone'>\n" +
+  "        <xsd:complexType>\n" +
+  "          <xsd:all>\n" +
+  "              <xsd:element name='areaCode' type='xsd:int'/>\n" +
+  "              <xsd:element name='exchange' type='xsd:string'/>\n" +
+  "              <xsd:element name='number' type='xsd:string'/>\n" +
+  "          </xsd:all>\n" +
+  "        </xsd:complexType>\n" +
+  "      </xsd:element>\n" +
+  "\n" +
+  "      <xsd:complexType name='Address'>\n" +
+  "        <xsd:all>\n" +
+  "            <xsd:element name='streetNum' type='xsd:int'/>\n" +
+  "            <xsd:element name='streetName' type='xsd:string'/>\n" +
+  "            <xsd:element name='city' type='xsd:string'/>\n" +
+  "            <xsd:element name='state' type='typens:StateType'/>\n" +
+  "            <xsd:element name='zip' type='xsd:int'/>\n" +
+  "            <xsd:element ref='typens:Phone'/>\n" +
+  "        </xsd:all>\n" +
+  "      </xsd:complexType>\n" +
+  "\n" +
+  "      <xsd:complexType name='ArrayOfaddress'>\n" +
+  "         <xsd:complexContent>\n" +
+  "            <xsd:restriction base='soap-enc:Array'>\n" +
+  "                <xsd:attribute ref='soap-enc:arrayType' wsdl:arrayType='typens:Address[]'/>\n" +
+  "            </xsd:restriction>\n" +
+  "         </xsd:complexContent>\n" +
+  "      </xsd:complexType>\n" +
+  "    </xsd:schema>\n" +
+  "  </types>\n" +
+  "\n" +
+  "  <!-- message declns -->\n" +
+  "  <message name='AddEntryRequest'>\n" +
+  "    <part name='name' type='xsd:string'/>\n" +
+  "    <part name='address' type='typens:Address'/>\n" +
+  "  </message>\n" +
+  "\n" +
+  "  <message name='GetAddressFromNameRequest'>\n" +
+  "    <part name='name' type='xsd:string'/>\n" +
+  "  </message>\n" +
+  "\n" +
+  "  <message name='GetAddressFromNameResponse'>\n" +
+  "    <part name='address' type='typens:Address'/>\n" +
+  "  </message>\n" +
+  "\n" +
+  "  <message name='getAddressesRequest'>\n" +
+  "  </message>  \n" +
+  "\n" +
+  "  <message name='getAddressesResponse'>\n" +
+  "    <part name='addresses' type='typens:ArrayOfaddress'/>\n" +
+  "  </message>\n" +
+  "\n" +
+  "  <!-- port type declns -->\n" +
+  "  <portType name='AddressBookNoImplSEI'>\n" +
+  "    <operation name='addEntry'>\n" +
+  "      <input message='tns:AddEntryRequest'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='getAddressFromName'>\n" +
+  "      <input message='tns:GetAddressFromNameRequest'/>\n" +
+  "      <output message='tns:GetAddressFromNameResponse'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='getAddresses'>\n" +
+  "      <input message='tns:getAddressesRequest'/>\n" +
+  "      <output message='tns:getAddressesResponse'/>\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "\n" +
+  "  <!-- binding declns -->\n" +
+  "  <binding name='AddressBookNoImplSEISoapBinding' type='tns:AddressBookNoImplSEI'>\n" +
+  "    <soap:binding style='rpc'\n" +
+  "                  transport='http://schemas.xmlsoap.org/soap/http'/>\n" +
+  "    <operation name='addEntry'>\n" +
+  "      <soap:operation soapAction=''/>\n" +
+  "      <input>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddrNoImplSEI'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddrNoImplSEI'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='getAddressFromName'>\n" +
+  "      <soap:operation soapAction=''/>\n" +
+  "      <input>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddrNoImplSEI'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddrNoImplSEI'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='getAddresses'>\n" +
+  "      <soap:operation soapAction=''/>\n" +
+  "      <input>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddressFetcher2'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='encoded'\n" +
+  "                   namespace='urn:AddressFetcher2'\n" +
+  "                   encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "\n" +
+  "  <!-- service decln -->\n" +
+  "  <service name='AddressBookNoImplSEIService'>\n" +
+  "    <port name='AddressBookNoImplSEI' binding='tns:AddressBookNoImplSEISoapBinding'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/AddressBookNoImplSEI'/>\n" +
+  "    </port>\n" +
+  "  </service>\n" +
+  "\n" +
+  "</definitions>\n";
+
+  public void testAddressBook() throws Exception {
+    parseString(addressBook, "addressBook.xsd");
+  }
+
+  private final String clash =
+  "<?xml version='1.0' ?>\n" +
+  "\n" +
+  "<definitions \n" +
+  "    name='name clash test'\n" +
+  "    targetNamespace='urn:clash.wsdl.test'\n" +
+  "    xmlns:tns='urn:clash.wsdl.test'\n" +
+  "    xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
+  "    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'\n" +
+  "    xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'\n" +
+  "    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'\n" +
+  "    xmlns='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  "\n" +
+  "  <!-- type defs -->\n" +
+  "  <types>\n" +
+  "    <xsd:schema targetNamespace='urn:clash.wsdl.test'\n" +
+  "                xmlns:xsd='http://www.w3.org/2001/XMLSchema'>\n" +
+  "      <xsd:complexType name='sharedName'>\n" +
+  "        <xsd:all>\n" +
+  "          <xsd:element name='sharedName' type='xsd:int'/>\n" +
+  "        </xsd:all>\n" +
+  "      </xsd:complexType>\n" +
+  "      <xsd:element name='sharedName'>\n" +
+  "        <xsd:complexType>\n" +
+  "          <xsd:all>\n" +
+  "            <xsd:element name='sharedName' type='xsd:int'/>\n" +
+  "          </xsd:all>\n" +
+  "        </xsd:complexType>\n" +
+  "      </xsd:element>\n" +
+  "      <xsd:element name='another'>\n" +
+  "        <xsd:complexType>\n" +
+  "          <xsd:all>\n" +
+  "            <xsd:element name='sharedName' type='xsd:boolean'/>\n" +
+  "          </xsd:all>\n" +
+  "        </xsd:complexType>\n" +
+  "      </xsd:element>\n" +
+  "    </xsd:schema>\n" +
+  "  </types>\n" +
+  "\n" +
+  "  <!-- message declns -->\n" +
+  "  <message name='empty'/>\n" +
+  "\n" +
+  "  <message name='sharedName'>\n" +
+  "    <part name='sharedName' type='tns:sharedName'/>\n" +
+  "  </message>\n" +
+  "  <message name='anotherMessage'>\n" +
+  "    <part name='sharedName' type='xsd:int'/>\n" +
+  "  </message>\n" +
+  "  <message name='literalMessage'>\n" +
+  "    <part name='literalPart' element='tns:sharedName'/>\n" +
+  "  </message>\n" +
+  "  <message name='anotherLitMessage'>\n" +
+  "    <part name='sharedName' element='tns:another'/>\n" +
+  "  </message>\n" +
+  "\n" +
+  "  <!-- port type declns -->\n" +
+  "  <portType name='sharedName'>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn' message='tns:empty'/>\n" +
+  "      <output name='sharedNameOut' message='tns:sharedName'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn2' message='tns:sharedName'/>\n" +
+  "      <output name='emptyOut2' message='tns:empty'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='anotherIn3' message='tns:anotherMessage'/>\n" +
+  "      <output name='emptyOut3' message='tns:empty'/>\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "\n" +
+  "  <portType name='literalPort'>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn' message='tns:empty'/>\n" +
+  "      <output name='sharedNameOut' message='tns:literalMessage'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn2' message='tns:literalMessage'/>\n" +
+  "      <output name='emptyOut2' message='tns:empty'/>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='anotherIn3' message='tns:anotherLitMessage'/>\n" +
+  "      <output name='emptyOut3' message='tns:empty'/>\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "\n" +
+  "  <!-- binding declns -->\n" +
+  "  <binding name='nonSharedName' type='tns:sharedName'>\n" +
+  "    <soap:binding\n" +
+  "        style='rpc'\n" +
+  "        transport='http://schemas.xmlsoap.org/soap/http'/>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='sharedNameOut'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn2'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut2'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='anotherIn3'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut3'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "\n" +
+  "<!-- don't do this one just yet...\n" +
+  "  <binding name='sharedName' type='tns:literalPort'>\n" +
+  "    <soap:binding\n" +
+  "        style='rpc'\n" +
+  "        transport='http://schemas.xmlsoap.org/soap/http'/>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </input>\n" +
+  "      <output name='sharedNameOut'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn2'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut2'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='anotherIn3'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut3'>\n" +
+  "        <soap:body use='literal'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "-->\n" +
+  "\n" +
+  "  <binding name='anotherNonSharedName' type='tns:sharedName'>\n" +
+  "    <soap:binding\n" +
+  "        style='rpc'\n" +
+  "        transport='http://schemas.xmlsoap.org/soap/http'/>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='sharedNameOut'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='sharedNameIn2'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut2'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='sharedName'>\n" +
+  "      <input name='anotherIn3'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </input>\n" +
+  "      <output name='emptyOut3'>\n" +
+  "        <soap:body use='encoded'/>\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "\n" +
+  "  <!-- service decln -->\n" +
+  "  <service name='sharedName'>\n" +
+  "    <port name='nonSharedName' binding='tns:nonSharedName'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/nonSharedName'/>\n" +
+  "    </port>\n" +
+  "    <port name='anotherNonSharedName' binding='tns:anotherNonSharedName'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/anotherNonSharedName'/>\n" +
+  "    </port>\n" +
+  "<!-- don't do this just yet...\n" +
+  "    <port name='sharedName' binding='tns:sharedName'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/sharedName'/>\n" +
+  "    </port>\n" +
+  "-->\n" +
+  "  </service>\n" +
+  "\n" +
+  "</definitions>\n";
+
+  public void testClash() throws Exception {
+    parseString(clash, "clash.xsd");
+  }
+
+  private static final String getPlan =
+  "<?xml version='1.0' encoding='utf-8'?>\n" +
+  "<definitions xmlns:http='http://schemas.xmlsoap.org/wsdl/http/'\n" +
+  "    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'\n" +
+  "    xmlns:s='http://www.w3.org/2001/XMLSchema'\n" +
+  "    xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'\n" +
+  "    xmlns:tm='http://microsoft.com/wsdl/mime/textMatching/'\n" +
+  "    xmlns:s0='http://tempuri.org/'\n" +
+  "    xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/'\n" +
+  "    targetNamespace='http://tempuri.org/' xmlns='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  "  <types>\n" +
+  "    <s:schema elementFormDefault='qualified' targetNamespace='http://tempuri.org/'>\n" +
+  "      <s:element name='GetPlan'>\n" +
+  "        <s:complexType />\n" +
+  "      </s:element>\n" +
+  "      <s:element name='GetPlanResponse'>\n" +
+  "        <s:complexType>\n" +
+  "          <s:sequence>\n" +
+  "            <s:element minOccurs='0' maxOccurs='1' name='GetPlanResult'\n" +
+  "                type='s0:Plan'/>\n" +
+  "          </s:sequence>\n" +
+  "        </s:complexType>\n" +
+  "      </s:element>\n" +
+  "\n" +
+  "      <s:complexType name='Plan'>\n" +
+  "        <s:sequence>\n" +
+  "          <s:element minOccurs='0' maxOccurs='1' name='Disposition'\n" +
+  "              type='s0:Disposition'/>\n" +
+  "        </s:sequence>\n" +
+  "      </s:complexType>\n" +
+  "\n" +
+  "      <s:complexType name='Disposition'>\n" +
+  "        <s:complexContent mixed='false'>\n" +
+  "          <s:extension base='s0:Status' />\n" +
+  "        </s:complexContent>\n" +
+  "      </s:complexType>\n" +
+  "\n" +
+  "      <s:complexType name='Status'>\n" +
+  "        <s:sequence>\n" +
+  "          <s:element minOccurs='0' maxOccurs='1' name='Code' type='s:string' />\n" +
+  "          <s:element minOccurs='0' maxOccurs='1' name='Description' \n" +
+  "              type='s:string'/>\n" +
+  "        </s:sequence>\n" +
+  "      </s:complexType>\n" +
+  "\n" +
+  "      <s:element name='Plan' nillable='true' type='s0:Plan' />\n" +
+  "    </s:schema>\n" +
+  "  </types>\n" +
+  "  <message name='GetPlanSoapIn'>\n" +
+  "    <part name='parameters' element='s0:GetPlan' />\n" +
+  "  </message>\n" +
+  "  <message name='GetPlanSoapOut'>\n" +
+  "    <part name='parameters' element='s0:GetPlanResponse' />\n" +
+  "  </message>\n" +
+  "  <message name='GetPlanHttpGetIn' />\n" +
+  "  <message name='GetPlanHttpGetOut'>\n" +
+  "    <part name='Body' element='s0:Plan' />\n" +
+  "  </message>\n" +
+  "  <message name='GetPlanHttpPostIn' />\n" +
+  "  <message name='GetPlanHttpPostOut'>\n" +
+  "    <part name='Body' element='s0:Plan' />\n" +
+  "  </message>\n" +
+  "  <portType name='PlanWSSoap'>\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <input message='s0:GetPlanSoapIn' />\n" +
+  "      <output message='s0:GetPlanSoapOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <portType name='PlanWSHttpGet'>\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <input message='s0:GetPlanHttpGetIn' />\n" +
+  "      <output message='s0:GetPlanHttpGetOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <portType name='PlanWSHttpPost'>\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <input message='s0:GetPlanHttpPostIn' />\n" +
+  "      <output message='s0:GetPlanHttpPostOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <binding name='PlanWSSoap' type='s0:PlanWSSoap'>\n" +
+  "    <soap:binding transport='http://schemas.xmlsoap.org/soap/http' \n" +
+  "        style='document'/>\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <soap:operation soapAction='http://tempuri.org/GetPlan' \n" +
+  "          style='document'/>\n" +
+  "      <input>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <binding name='PlanWSHttpGet' type='s0:PlanWSHttpGet'>\n" +
+  "    <http:binding verb='GET' />\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <http:operation location='/GetPlan' />\n" +
+  "      <input>\n" +
+  "        <http:urlEncoded />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <mime:mimeXml part='Body' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <binding name='PlanWSHttpPost' type='s0:PlanWSHttpPost'>\n" +
+  "    <http:binding verb='POST' />\n" +
+  "    <operation name='GetPlan'>\n" +
+  "      <http:operation location='/GetPlan' />\n" +
+  "      <input>\n" +
+  "        <mime:content type='application/x-www-form-urlencoded' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <mime:mimeXml part='Body' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <service name='PlanWS'>\n" +
+  "    <port name='PlanWSSoap' binding='s0:PlanWSSoap'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/PlanWSSoap' />\n" +
+  "    </port>\n" +
+  "    <port name='PlanWSHttpGet' binding='s0:PlanWSHttpGet'>\n" +
+  "      <http:address location='http://localhost:8080/axis/services/PlanWSSoap' />\n" +
+  "    </port>\n" +
+  "    <port name='PlanWSHttpPost' binding='s0:PlanWSHttpPost'>\n" +
+  "      <http:address location='http://localhost:8080/axis/services/PlanWSSoap' />\n" +
+  "    </port>\n" +
+  "  </service>\n" +
+  "</definitions>\n" +
+  "\n";
+
+  public void testGetPlan() throws Exception {
+    parseString(getPlan, "getPlan.xsd");
+  }
+
+  private String adaptive =
+  "<?xml version='1.0' encoding='UTF-8'?>\n" +
+  "\n" +
+  "<definitions name='Adaptive' targetNamespace='http://com.test/wsdl/Adaptive' xmlns:tns='http://com.test/wsdl/Adaptive' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:ns2='http://com.test/types/Adaptive' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'>\n" +
+  "  <types>\n" +
+  "    <schema targetNamespace='http://com.test/types/Adaptive' xmlns:tns='http://com.test/types/Adaptive' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns2='http://java.sun.com/jax-rpc-ri/internal' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns='http://www.w3.org/2001/XMLSchema'>\n" +
+  "      <import namespace='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      <import namespace='http://java.sun.com/jax-rpc-ri/internal'/>\n" +
+  "      <complexType name='ArrayOfResourceInfo'>\n" +
+  "        <complexContent>\n" +
+  "          <restriction base='soap-enc:Array'>\n" +
+  "            <attribute ref='soap-enc:arrayType' wsdl:arrayType='tns:ResourceInfo[]'/></restriction></complexContent></complexType>\n" +
+  "      <complexType name='ResourceInfo'>\n" +
+  "        <sequence>\n" +
+  "          <element name='properties' type='ns2:vector'/>\n" +
+  "          <element name='id' type='string'/></sequence></complexType>\n" +
+  "      <complexType name='ApplicationInfo'>\n" +
+  "        <sequence>\n" +
+  "          <element name='dummy' type='tns:KeyValue'/>\n" +
+  "          <element name='properties' type='ns2:vector'/>\n" +
+  "          <element name='id' type='string'/></sequence></complexType>\n" +
+  "      <complexType name='KeyValue'>\n" +
+  "        <sequence>\n" +
+  "          <element name='key' type='string'/>\n" +
+  "          <element name='value' type='string'/></sequence></complexType>\n" +
+  "      <complexType name='ArrayOfint'>\n" +
+  "        <complexContent>\n" +
+  "          <restriction base='soap-enc:Array'>\n" +
+  "            <attribute ref='soap-enc:arrayType' wsdl:arrayType='int[]'/></restriction></complexContent></complexType>\n" +
+  "      <complexType name='ArrayOfstring'>\n" +
+  "        <complexContent>\n" +
+  "          <restriction base='soap-enc:Array'>\n" +
+  "            <attribute ref='soap-enc:arrayType' wsdl:arrayType='string[]'/></restriction></complexContent></complexType>\n" +
+  "      <complexType name='ArrayOfArrayOfstring'>\n" +
+  "        <complexContent>\n" +
+  "          <restriction base='soap-enc:Array'>\n" +
+  "            <attribute ref='soap-enc:arrayType' wsdl:arrayType='tns:ArrayOfstring[]'/></restriction></complexContent></complexType></schema>\n" +
+  "    <schema targetNamespace='http://java.sun.com/jax-rpc-ri/internal' xmlns:tns='http://java.sun.com/jax-rpc-ri/internal' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns:soap-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns='http://www.w3.org/2001/XMLSchema'>\n" +
+  "      <import namespace='http://schemas.xmlsoap.org/soap/encoding/'/>\n" +
+  "      <import namespace='http://com.test/types/Adaptive'/>\n" +
+  "      <complexType name='vector'>\n" +
+  "        <complexContent>\n" +
+  "          <extension base='tns:list'>\n" +
+  "            <sequence/></extension></complexContent></complexType>\n" +
+  "      <complexType name='list'>\n" +
+  "        <complexContent>\n" +
+  "          <extension base='tns:collection'>\n" +
+  "            <sequence/></extension></complexContent></complexType>\n" +
+  "      <complexType name='collection'>\n" +
+  "        <complexContent>\n" +
+  "          <restriction base='soap-enc:Array'>\n" +
+  "            <attribute ref='soap-enc:arrayType' wsdl:arrayType='anyType[]'/></restriction></complexContent></complexType></schema></types>\n" +
+  "  <message name='AdaptiveInterface_getServiceDescription'/>\n" +
+  "  <message name='AdaptiveInterface_getServiceDescriptionResponse'>\n" +
+  "    <part name='result' type='xsd:string'/></message>\n" +
+  "  <message name='AdaptiveInterface_rankResources'>\n" +
+  "    <part name='arrayOfResourceInfo_1' type='ns2:ArrayOfResourceInfo'/>\n" +
+  "    <part name='ApplicationInfo_2' type='ns2:ApplicationInfo'/></message>\n" +
+  "  <message name='AdaptiveInterface_rankResourcesResponse'>\n" +
+  "    <part name='result' type='ns2:ArrayOfResourceInfo'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateTransferTime'>\n" +
+  "    <part name='boolean_1' type='xsd:boolean'/>\n" +
+  "    <part name='ResourceInfo_2' type='ns2:ResourceInfo'/>\n" +
+  "    <part name='arrayOfResourceInfo_3' type='ns2:ArrayOfResourceInfo'/>\n" +
+  "    <part name='long_4' type='xsd:long'/>\n" +
+  "    <part name='Calendar_5' type='xsd:dateTime'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateTransferTimeResponse'>\n" +
+  "    <part name='result' type='ns2:ArrayOfint'/></message>\n" +
+  "  <message name='AdaptiveInterface_logDataTransfer'>\n" +
+  "    <part name='ResourceInfo_1' type='ns2:ResourceInfo'/>\n" +
+  "    <part name='ResourceInfo_2' type='ns2:ResourceInfo'/>\n" +
+  "    <part name='long_3' type='xsd:long'/>\n" +
+  "    <part name='Calendar_4' type='xsd:dateTime'/>\n" +
+  "    <part name='Calendar_5' type='xsd:dateTime'/></message>\n" +
+  "  <message name='AdaptiveInterface_logDataTransferResponse'/>\n" +
+  "  <message name='AdaptiveInterface_estimateUsage'>\n" +
+  "    <part name='boolean_1' type='xsd:boolean'/>\n" +
+  "    <part name='ResourceInfo_2' type='ns2:ResourceInfo'/>\n" +
+  "    <part name='String_3' type='xsd:string'/>\n" +
+  "    <part name='int_4' type='xsd:int'/>\n" +
+  "    <part name='Calendar_5' type='xsd:dateTime'/>\n" +
+  "    <part name='Calendar_6' type='xsd:dateTime'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateUsageResponse'>\n" +
+  "    <part name='result' type='xsd:string'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateMultipleUsage'>\n" +
+  "    <part name='boolean_1' type='xsd:boolean'/>\n" +
+  "    <part name='arrayOfResourceInfo_2' type='ns2:ArrayOfResourceInfo'/>\n" +
+  "    <part name='arrayOfString_3' type='ns2:ArrayOfstring'/>\n" +
+  "    <part name='int_4' type='xsd:int'/>\n" +
+  "    <part name='Calendar_5' type='xsd:dateTime'/>\n" +
+  "    <part name='Calendar_6' type='xsd:dateTime'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateMultipleUsageResponse'>\n" +
+  "    <part name='result' type='ns2:ArrayOfArrayOfstring'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateNetworkGraph'>\n" +
+  "    <part name='boolean_1' type='xsd:boolean'/>\n" +
+  "    <part name='arrayOfResourceInfo_2' type='ns2:ArrayOfResourceInfo'/>\n" +
+  "    <part name='int_3' type='xsd:int'/>\n" +
+  "    <part name='Calendar_4' type='xsd:dateTime'/>\n" +
+  "    <part name='Calendar_5' type='xsd:dateTime'/></message>\n" +
+  "  <message name='AdaptiveInterface_estimateNetworkGraphResponse'>\n" +
+  "    <part name='result' type='ns2:ArrayOfArrayOfstring'/></message>\n" +
+  "  <portType name='AdaptiveInterface'>\n" +
+  "    <operation name='getServiceDescription' parameterOrder=''>\n" +
+  "      <input message='tns:AdaptiveInterface_getServiceDescription'/>\n" +
+  "      <output message='tns:AdaptiveInterface_getServiceDescriptionResponse'/></operation>\n" +
+  "    <operation name='rankResources' parameterOrder='arrayOfResourceInfo_1 ApplicationInfo_2'>\n" +
+  "      <input message='tns:AdaptiveInterface_rankResources'/>\n" +
+  "      <output message='tns:AdaptiveInterface_rankResourcesResponse'/></operation>\n" +
+  "    <operation name='estimateTransferTime' parameterOrder='boolean_1 ResourceInfo_2 arrayOfResourceInfo_3 long_4 Calendar_5'>\n" +
+  "      <input message='tns:AdaptiveInterface_estimateTransferTime'/>\n" +
+  "      <output message='tns:AdaptiveInterface_estimateTransferTimeResponse'/></operation>\n" +
+  "    <operation name='logDataTransfer' parameterOrder='ResourceInfo_1 ResourceInfo_2 long_3 Calendar_4 Calendar_5'>\n" +
+  "      <input message='tns:AdaptiveInterface_logDataTransfer'/>\n" +
+  "      <output message='tns:AdaptiveInterface_logDataTransferResponse'/></operation>\n" +
+  "    <operation name='estimateUsage' parameterOrder='boolean_1 ResourceInfo_2 String_3 int_4 Calendar_5 Calendar_6'>\n" +
+  "      <input message='tns:AdaptiveInterface_estimateUsage'/>\n" +
+  "      <output message='tns:AdaptiveInterface_estimateUsageResponse'/></operation>\n" +
+  "    <operation name='estimateMultipleUsage' parameterOrder='boolean_1 arrayOfResourceInfo_2 arrayOfString_3 int_4 Calendar_5 Calendar_6'>\n" +
+  "      <input message='tns:AdaptiveInterface_estimateMultipleUsage'/>\n" +
+  "      <output message='tns:AdaptiveInterface_estimateMultipleUsageResponse'/></operation>\n" +
+  "    <operation name='estimateNetworkGraph' parameterOrder='boolean_1 arrayOfResourceInfo_2 int_3 Calendar_4 Calendar_5'>\n" +
+  "      <input message='tns:AdaptiveInterface_estimateNetworkGraph'/>\n" +
+  "      <output message='tns:AdaptiveInterface_estimateNetworkGraphResponse'/></operation></portType>\n" +
+  "  <binding name='AdaptiveInterfaceBinding' type='tns:AdaptiveInterface'>\n" +
+  "    <operation name='getServiceDescription'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='rankResources'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='estimateTransferTime'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='logDataTransfer'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='estimateUsage'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='estimateMultipleUsage'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <operation name='estimateNetworkGraph'>\n" +
+  "      <input>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></input>\n" +
+  "      <output>\n" +
+  "        <soap:body encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' use='encoded' namespace='http://com.test/wsdl/Adaptive'/></output>\n" +
+  "      <soap:operation soapAction=''/></operation>\n" +
+  "    <soap:binding transport='http://schemas.xmlsoap.org/soap/http' style='rpc'/></binding>\n" +
+  "  <service name='AdaptiveService'>\n" +
+  "    <port name='Adaptive' binding='tns:AdaptiveInterfaceBinding'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/Adaptive'/></port></service></definitions>\n";
+
+  public void testAdaptive() throws Exception {
+    parseString(adaptive, "adaptive.xsd");
+  }
+
+  private String dataService =
+  "<?xml version='1.0' encoding='utf-8'?>\n" +
+  "<definitions xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:s='http://www.w3.org/2001/XMLSchema' xmlns:s0='http://tempuri.org/' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tm='http://microsoft.com/wsdl/mime/textMatching/' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' targetNamespace='http://tempuri.org/' xmlns='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  "  <types>\n" +
+  "    <s:schema elementFormDefault='qualified' targetNamespace='http://tempuri.org/'>\n" +
+  "      <s:import namespace='http://www.w3.org/2001/XMLSchema' />\n" +
+  "      <s:element name='GetTitleAuthors'>\n" +
+  "        <s:complexType />\n" +
+  "      </s:element>\n" +
+  "      <s:element name='GetTitleAuthorsResponse'>\n" +
+  "        <s:complexType>\n" +
+  "          <s:sequence>\n" +
+  "            <s:element minOccurs='0' maxOccurs='1' name='GetTitleAuthorsResult'>\n" +
+  "              <s:complexType>\n" +
+  "                <s:sequence>\n" +
+  "                  <s:element ref='s:schema' />\n" +
+  "                  <s:any />\n" +
+  "                </s:sequence>\n" +
+  "              </s:complexType>\n" +
+  "            </s:element>\n" +
+  "          </s:sequence>\n" +
+  "        </s:complexType>\n" +
+  "      </s:element>\n" +
+  "      <s:element name='PutTitleAuthors'>\n" +
+  "        <s:complexType>\n" +
+  "          <s:sequence>\n" +
+  "            <s:element minOccurs='0' maxOccurs='1' name='DS'>\n" +
+  "              <s:complexType>\n" +
+  "                <s:sequence>\n" +
+  "                  <s:element ref='s:schema' />\n" +
+  "                  <s:any />\n" +
+  "                </s:sequence>\n" +
+  "              </s:complexType>\n" +
+  "            </s:element>\n" +
+  "          </s:sequence>\n" +
+  "        </s:complexType>\n" +
+  "      </s:element>\n" +
+  "      <s:element name='PutTitleAuthorsResponse'>\n" +
+  "        <s:complexType>\n" +
+  "          <s:sequence>\n" +
+  "            <s:element minOccurs='1' maxOccurs='1' name='PutTitleAuthorsResult' type='s:int' />\n" +
+  "          </s:sequence>\n" +
+  "        </s:complexType>\n" +
+  "      </s:element>\n" +
+  "      <s:element name='DataSet' nillable='true'>\n" +
+  "        <s:complexType>\n" +
+  "          <s:sequence>\n" +
+  "            <s:element ref='s:schema' />\n" +
+  "            <s:any />\n" +
+  "          </s:sequence>\n" +
+  "        </s:complexType>\n" +
+  "      </s:element>\n" +
+  "    </s:schema>\n" +
+  "  </types>\n" +
+  "  <message name='GetTitleAuthorsSoapIn'>\n" +
+  "    <part name='parameters' element='s0:GetTitleAuthors' />\n" +
+  "  </message>\n" +
+  "  <message name='GetTitleAuthorsSoapOut'>\n" +
+  "    <part name='parameters' element='s0:GetTitleAuthorsResponse' />\n" +
+  "  </message>\n" +
+  "  <message name='PutTitleAuthorsSoapIn'>\n" +
+  "    <part name='parameters' element='s0:PutTitleAuthors' />\n" +
+  "  </message>\n" +
+  "  <message name='PutTitleAuthorsSoapOut'>\n" +
+  "    <part name='parameters' element='s0:PutTitleAuthorsResponse' />\n" +
+  "  </message>\n" +
+  "  <message name='GetTitleAuthorsHttpGetIn' />\n" +
+  "  <message name='GetTitleAuthorsHttpGetOut'>\n" +
+  "    <part name='Body' element='s0:DataSet' />\n" +
+  "  </message>\n" +
+  "  <message name='GetTitleAuthorsHttpPostIn' />\n" +
+  "  <message name='GetTitleAuthorsHttpPostOut'>\n" +
+  "    <part name='Body' element='s0:DataSet' />\n" +
+  "  </message>\n" +
+  "  <portType name='DataServiceSoap'>\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <input message='s0:GetTitleAuthorsSoapIn' />\n" +
+  "      <output message='s0:GetTitleAuthorsSoapOut' />\n" +
+  "    </operation>\n" +
+  "    <operation name='PutTitleAuthors'>\n" +
+  "      <input message='s0:PutTitleAuthorsSoapIn' />\n" +
+  "      <output message='s0:PutTitleAuthorsSoapOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <portType name='DataServiceHttpGet'>\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <input message='s0:GetTitleAuthorsHttpGetIn' />\n" +
+  "      <output message='s0:GetTitleAuthorsHttpGetOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <portType name='DataServiceHttpPost'>\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <input message='s0:GetTitleAuthorsHttpPostIn' />\n" +
+  "      <output message='s0:GetTitleAuthorsHttpPostOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <binding name='DataServiceSoap' type='s0:DataServiceSoap'>\n" +
+  "    <soap:binding transport='http://schemas.xmlsoap.org/soap/http' style='document' />\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <soap:operation soapAction='http://tempuri.org/GetTitleAuthors' style='document' />\n" +
+  "      <input>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "    <operation name='PutTitleAuthors'>\n" +
+  "      <soap:operation soapAction='http://tempuri.org/PutTitleAuthors' style='document' />\n" +
+  "      <input>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <binding name='DataServiceHttpGet' type='s0:DataServiceHttpGet'>\n" +
+  "    <http:binding verb='GET' />\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <http:operation location='/GetTitleAuthors' />\n" +
+  "      <input>\n" +
+  "        <http:urlEncoded />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <mime:mimeXml part='Body' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <binding name='DataServiceHttpPost' type='s0:DataServiceHttpPost'>\n" +
+  "    <http:binding verb='POST' />\n" +
+  "    <operation name='GetTitleAuthors'>\n" +
+  "      <http:operation location='/GetTitleAuthors' />\n" +
+  "      <input>\n" +
+  "        <mime:content type='application/x-www-form-urlencoded' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <mime:mimeXml part='Body' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <service name='DataService'>\n" +
+  "    <port name='DataServiceSoap' binding='s0:DataServiceSoap'>\n" +
+  "      <soap:address location='http://samples.gotdotnet.com/quickstart/aspplus/samples/services/DataService/VB/DataService.asmx' />\n" +
+  "    </port>\n" +
+  "    <port name='DataServiceHttpGet' binding='s0:DataServiceHttpGet'>\n" +
+  "      <http:address location='http://samples.gotdotnet.com/quickstart/aspplus/samples/services/DataService/VB/DataService.asmx' />\n" +
+  "    </port>\n" +
+  "    <port name='DataServiceHttpPost' binding='s0:DataServiceHttpPost'>\n" +
+  "      <http:address location='http://samples.gotdotnet.com/quickstart/aspplus/samples/services/DataService/VB/DataService.asmx' />\n" +
+  "    </port>\n" +
+  "  </service>\n" +
+  "</definitions>\n";
+
+  public void testDataService() throws Exception {
+    parseString(dataService, "dataService.xsd");
+  }
+
+  private static final String thing =
+  "<?xml version='1.0' encoding='utf-8'?>\n" +
+  "<definitions xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' \n" +
+  "xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' \n" +
+  "xmlns:s='http://www.w3.org/2001/XMLSchema' xmlns:s0='urn:Thing' \n" +
+  "xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' \n" +
+  "xmlns:tm='http://microsoft.com/wsdl/mime/textMatching/' \n" +
+  "xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' \n" +
+  "targetNamespace='urn:Thing' xmlns='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  "<!--\n" +
+  "\n" +
+  "This test checks out the emitting of holders for container elements\n" +
+  "(arrays) that are inside elements.\n" +
+  "\n" +
+  "-->\n" +
+  "\n" +
+  "\n" +
+  "  <types>\n" +
+  "      <s:schema elementFormDefault='qualified' targetNamespace='urn:Thing'>\n" +
+  "          <s:element name='aThing' type='s0:aThing' final='restriction'/>\n" +
+  "          <s:simpleType name='aThing'>\n" +
+  "              <s:restriction base='s:string'>\n" +
+  "                  <s:maxLength value='255'/>\n" +
+  "              </s:restriction>\n" +
+  "          </s:simpleType>\n" +
+  "          <s:element name='otherData' type='s0:otherData' final='restriction'/>\n" +
+  "          <s:simpleType name='otherData'>\n" +
+  "              <s:restriction base='s:string'>\n" +
+  "                  <s:maxLength value='1024'/>\n" +
+  "              </s:restriction>\n" +
+  "          </s:simpleType>\n" +
+  "          <s:element name='find_aThing' type='s0:find_aThing' final='restriction'/>\n" +
+  "          <s:complexType name='find_aThing' final='restriction'>\n" +
+  "              <s:sequence>\n" +
+  "                  <s:element ref='s0:aThing' maxOccurs='1'/>\n" +
+  "              </s:sequence>\n" +
+  "          </s:complexType>\n" +
+  "          <s:element name='AThingResponse' type='s0:AThingResponse' final='restriction'/>\n" +
+  "          <s:complexType name='AThingResponse' final='restriction'>\n" +
+  "              <s:sequence>\n" +
+  "                  <s:element ref='s0:aThing' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "                  <s:element ref='s0:otherData' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "              </s:sequence>\n" +
+  "          </s:complexType>\n" +
+  "      </s:schema>\n" +
+  "  </types>\n" +
+  "  <message name='ThingIn'>\n" +
+  "    <part name='parameters' element='s0:find_aThing' />\n" +
+  "  </message>\n" +
+  "  <message name='ThingOut'>\n" +
+  "    <part name='parameters' element='s0:AThingResponse' />\n" +
+  "  </message>\n" +
+  "  <portType name='Thing'>\n" +
+  "    <operation name='find_aThing'>\n" +
+  "      <input message='s0:ThingIn' />\n" +
+  "      <output message='s0:ThingOut' />\n" +
+  "    </operation>\n" +
+  "  </portType>\n" +
+  "  <binding name='Thing' type='s0:Thing'>\n" +
+  "    <soap:binding transport='http://schemas.xmlsoap.org/soap/http' style='document' />\n" +
+  "    <operation name='find_aThing'>\n" +
+  "      <soap:operation soapAction='http://tempuri.org/find_aThing' style='document' />\n" +
+  "      <input>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </input>\n" +
+  "      <output>\n" +
+  "        <soap:body use='literal' />\n" +
+  "      </output>\n" +
+  "    </operation>\n" +
+  "  </binding>\n" +
+  "  <service name='wrapped_holders'>\n" +
+  "    <port name='Thing' binding='s0:Thing'>\n" +
+  "      <soap:address location='http://localhost:8080/axis/services/Thing' />\n" +
+  "    </port>\n" +
+  "  </service>\n" +
+  "</definitions>\n" +
+  "\n";
+
+  public void testThing() throws Exception {
+    parseString(thing, "thing.xsd");
+  }
+
+  private final String soap12Test =
+  "<?xml version='1.0'?>\n" +
+  "\n" +
+  "<definitions name='SOAP-12-TestDefinitions'\n" +
+  " targetNamespace='http://whitemesa.net/wsdl/soap12-test'\n" +
+  " xmlns='http://schemas.xmlsoap.org/wsdl/'\n" +
+  " xmlns:soap12='http://schemas.xmlsoap.org/wsdl/soap12/'\n" +
+  " xmlns:xsd='http://www.w3.org/2001/XMLSchema'\n" +
+  " xmlns:enc='http://www.w3.org/2003/05/soap-encoding'\n" +
+  " xmlns:tns='http://whitemesa.net/wsdl/soap12-test'\n" +
+  " xmlns:types='http://example.org/ts-tests/xsd'\n" +
+  " xmlns:test='http://example.org/ts-tests'\n" +
+  " xmlns:xlink='http://www.w3.org/1999/xlink'\n" +
+  " xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>\n" +
+  " <types>\n" +
+  "   <schema xmlns='http://www.w3.org/2001/XMLSchema' targetNamespace='http://example.org/ts-tests/xsd'>\n" +
+  "\n" +
+  "     <import namespace='http://www.w3.org/2003/05/soap-encoding' />\n" +
+  "\n" +
+  "     <complexType name='ArrayOfstring'>\n" +
+  "       <complexContent>\n" +
+  "         <restriction base='enc:Array'>\n" +
+  "           <sequence>\n" +
+  "             <element name='item' type='xsd:string' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "           </sequence>\n" +
+  "             <attributeGroup ref='enc:arrayAttributes' /> \n" +
+  "             <attributeGroup ref='enc:commonAttributes' /> \n" +
+  "         </restriction>\n" +
+  "       </complexContent>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <complexType name='ArrayOfint'>\n" +
+  "       <complexContent>\n" +
+  "         <restriction base='enc:Array'>\n" +
+  "           <sequence>\n" +
+  "             <element name='item' type='xsd:int' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "           </sequence>\n" +
+  "             <attributeGroup ref='enc:arrayAttributes' /> \n" +
+  "             <attributeGroup ref='enc:commonAttributes' /> \n" +
+  "         </restriction>\n" +
+  "       </complexContent>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <complexType name='ArrayOffloat'>\n" +
+  "       <complexContent>\n" +
+  "         <restriction base='enc:Array'>\n" +
+  "           <sequence>\n" +
+  "             <element name='item' type='xsd:float' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "           </sequence>\n" +
+  "             <attributeGroup ref='enc:arrayAttributes' /> \n" +
+  "             <attributeGroup ref='enc:commonAttributes' /> \n" +
+  "         </restriction>\n" +
+  "       </complexContent>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <complexType name='ArrayOfSOAPStruct'>\n" +
+  "       <complexContent>\n" +
+  "         <restriction base='enc:Array'>\n" +
+  "           <sequence>\n" +
+  "             <element name='item' type='types:SOAPStruct' minOccurs='0' maxOccurs='unbounded'/>\n" +
+  "           </sequence>\n" +
+  "             <attributeGroup ref='enc:arrayAttributes' /> \n" +
+  "             <attributeGroup ref='enc:commonAttributes' /> \n" +
+  "         </restriction>\n" +
+  "       </complexContent>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <complexType name='SOAPStruct'>\n" +
+  "       <all>\n" +
+  "         <element name='varString' type='xsd:string'/>\n" +
+  "         <element name='varInt' type='xsd:int'/>\n" +
+  "         <element name='varFloat' type='xsd:float'/>\n" +
+  "       </all>\n" +
+  "     </complexType>\n" +
+  "     <complexType name='SOAPStructStruct'>\n" +
+  "       <all>\n" +
+  "         <element name='varString' type='xsd:string'/>\n" +
+  "         <element name='varInt' type='xsd:int'/>\n" +
+  "         <element name='varFloat' type='xsd:float'/>\n" +
+  "         <element name='varStruct' type='types:SOAPStruct'/>\n" +
+  "       </all>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <complexType name='SOAPArrayStruct'>\n" +
+  "       <all>\n" +
+  "         <element name='varString' type='xsd:string'/>\n" +
+  "         <element name='varInt' type='xsd:int'/>\n" +
+  "         <element name='varFloat' type='xsd:float'/>\n" +
+  "         <element name='varArray' type='types:ArrayOfstring'/>\n" +
+  "       </all>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "   </schema>\n" +
+  "\n" +
+  "       <schema xmlns='http://www.w3.org/2001/XMLSchema'\n" +
+  "     elementFormDefault='qualified'\n" +
+  "     targetNamespace='http://example.org/ts-tests'>\n" +
+  "\n" +
+  "     <import namespace='http://www.w3.org/1999/xlink' />\n" +
+  "\n" +
+  "     <!-- 3.2.1 echoOk -->\n" +
+  "     <element name='echoOk' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.2 responseOk -->\n" +
+  "     <element name='responseOk' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.3 Ignore -->\n" +
+  "     <element name='Ignore' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.4 requiredHeader -->\n" +
+  "     <element name='requiredHeader' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.5 DataHolder -->\n" +
+  "     <element name='DataHolder' type='test:DataHolder_t'/>\n" +
+  "     <complexType name='DataHolder_t'>\n" +
+  "       <sequence>\n" +
+  "         <element name='Data' type='xsd:string' minOccurs='1' maxOccurs='unbounded'/>\n" +
+  "       </sequence>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <!-- 3.2.6 concatAndForwardEchoOk -->\n" +
+  "     <element name='concatAndForwardEchoOk'/>\n" +
+  "\n" +
+  "     <!-- 3.2.7 concatAndForwardEchoOkArg1 -->\n" +
+  "     <element name='concatAndForwardEchoOkArg1' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.8 concatAndForwardEchoOkArg2 -->\n" +
+  "     <element name='concatAndForwardEchoOkArg2' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.9 validateCountryCode -->\n" +
+  "     <element name='validateCountryCode' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.10 validateCountryCodeFault -->\n" +
+  "     <element name='validateCountryCodeFault' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- 3.2.11 echoResolvedRef -->\n" +
+  "     <element name='RelativeReference' type='test:RelativeReference_t'/>\n" +
+  "     <complexType name='RelativeReference_t'>\n" +
+  "       <attribute ref='xml:base'/>\n" +
+  "         <attribute ref='xlink:href'/>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <element name='echoResolvedRef' type='test:echoResolvedRef_t'/>\n" +
+  "     <complexType name='echoResolvedRef_t'>\n" +
+  "       <complexContent>\n" +
+  "         <sequence>\n" +
+  "           <element ref='test:RelativeReference' minOccurs='1' maxOccurs='1'/>\n" +
+  "         </sequence>\n" +
+  "       </complexContent>\n" +
+  "     </complexType>\n" +
+  "\n" +
+  "     <!-- 3.2.12 responseResolvedRef -->\n" +
+  "     <element name='responseResolvedRef' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- echoOkUltimateReceiver added to support testing of 'relay' -->\n" +
+  "     <element name='echoOkUltimateReceiver' type='xsd:string'/>\n" +
+  "\n" +
+  "     <!-- responseOkUltimateReceiver added to support testing of 'relay' -->\n" +
+  "     <element name='responseOkUltimateReceiver' type='xsd:string'/>\n" +
+  "\n" +
+  "   </schema>\n" +
+  "\n" +
+  " </types>\n" +
+  "\n" +
+  " <!-- 3.4.1 returnVoid rpc operation -->\n" +
+  " <message name='returnVoidRequest'/>\n" +
+  " <message name='returnVoidResponse'/>\n" +
+  "\n" +
+  " <!-- 3.4.2 echoStruct rpc operation -->\n" +
+  " <message name='echoStructRequest'>\n" +
+  "   <part name='inputStruct' type='types:SOAPStruct'/>\n" +
+  " </message>\n" +
+  " <message name='echoStructResponse'>\n" +
+  "   <part name='return' type='types:SOAPStruct'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.3 echoStructArray rpc operation -->\n" +
+  " <message name='echoStructArrayRequest'>\n" +
+  "   <part name='inputStructArray' type='types:ArrayOfSOAPStruct'/>\n" +
+  " </message>\n" +
+  " <message name='echoStructArrayResponse'>\n" +
+  "   <part name='return' type='types:ArrayOfSOAPStruct'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.4 echoStructAsSimpleTypes rpc operation -->\n" +
+  " <message name='echoStructAsSimpleTypesRequest'>\n" +
+  "   <part name='inputStruct' type='types:SOAPStruct'/>\n" +
+  " </message>\n" +
+  " <message name='echoStructAsSimpleTypesResponse'>\n" +
+  "   <part name='outputString' type='xsd:string'/>\n" +
+  "   <part name='outputInteger' type='xsd:int'/>\n" +
+  "   <part name='outputFloat' type='xsd:float'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.5 echoSimpleTypesAsStruct rpc operation -->\n" +
+  " <message name='echoSimpleTypesAsStructRequest'>\n" +
+  "   <part name='inputString' type='xsd:string'/>\n" +
+  "   <part name='inputInteger' type='xsd:int'/>\n" +
+  "   <part name='inputFloat' type='xsd:float'/>\n" +
+  " </message>\n" +
+  " <message name='echoSimpleTypesAsStructResponse'>\n" +
+  "   <part name='return' type='types:SOAPStruct'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.6 echoNestedStruct rpc operation -->\n" +
+  " <message name='echoNestedStructRequest'>\n" +
+  "   <part name='inputStruct' type='types:SOAPStructStruct'/>\n" +
+  " </message>\n" +
+  " <message name='echoNestedStructResponse'>\n" +
+  "   <part name='return' type='types:SOAPStructStruct'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.7 echoNestedArray rpc operation -->\n" +
+  " <message name='echoNestedArrayRequest'>\n" +
+  "   <part name='inputStruct' type='types:SOAPArrayStruct'/>\n" +
+  " </message>\n" +
+  " <message name='echoNestedArrayResponse'>\n" +
+  "   <part name='return' type='types:SOAPArrayStruct'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.8 echoFloatArray rpc operation -->\n" +
+  " <message name='echoFloatArrayRequest'>\n" +
+  "   <part name='inputFloatArray' type='types:ArrayOffloat'/>\n" +
+  " </message>\n" +
+  " <message name='echoFloatArrayResponse'>\n" +
+  "   <part name='return' type='types:ArrayOffloat'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.9 echoStringArray rpc operation -->\n" +
+  " <message name='echoStringArrayRequest'>\n" +
+  "   <part name='inputStringArray' type='types:ArrayOfstring'/>\n" +
+  " </message>\n" +
+  " <message name='echoStringArrayResponse'>\n" +
+  "   <part name='return' type='types:ArrayOfstring'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.10 echoIntegerArray rpc operation -->\n" +
+  " <message name='echoIntegerArrayRequest'>\n" +
+  "   <part name='inputIntegerArray' type='types:ArrayOfint'/>\n" +
+  " </message>\n" +
+  " <message name='echoIntegerArrayResponse'>\n" +
+  "   <part name='return' type='types:ArrayOfint'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.11 echoBase64 rpc operation -->\n" +
+  " <message name='echoBase64Request'>\n" +
+  "   <part name='inputBase64' type='xsd:base64Binary'/>\n" +
+  " </message>\n" +
+  " <message name='echoBase64Response'>\n" +
+  "   <part name='return' type='xsd:base64Binary'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.12 echoBoolean rpc operation -->\n" +
+  " <message name='echoBooleanRequest'>\n" +
+  "   <part name='inputBoolean' type='xsd:boolean'/>\n" +
+  " </message>\n" +
+  " <message name='echoBooleanResponse'>\n" +
+  "   <part name='return' type='xsd:boolean'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.13 echoDate rpc operation -->\n" +
+  " <message name='echoDateRequest'>\n" +
+  "   <part name='inputDate' type='xsd:dateTime'/>\n" +
+  " </message>\n" +
+  " <message name='echoDateResponse'>\n" +
+  "   <part name='return' type='xsd:dateTime'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.14 echoDecimal rpc operation -->\n" +
+  " <message name='echoDecimalRequest'>\n" +
+  "   <part name='inputDecimal' type='xsd:decimal'/>\n" +
+  " </message>\n" +
+  " <message name='echoDecimalResponse'>\n" +
+  "   <part name='return' type='xsd:decimal'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.15 echoFloat rpc operation -->\n" +
+  " <message name='echoFloatRequest'>\n" +
+  "   <part name='inputFloat' type='xsd:float'/>\n" +
+  " </message>\n" +
+  " <message name='echoFloatResponse'>\n" +
+  "   <part name='return' type='xsd:float'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.16 echoString rpc operation -->\n" +
+  " <message name='echoStringRequest'>\n" +
+  "   <part name='inputString' type='xsd:string'/>\n" +
+  " </message>\n" +
+  " <message name='echoStringResponse'>\n" +
+  "   <part name='return' type='xsd:string'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.17 countItems rpc operation -->\n" +
+  " <message name='countItemsRequest'>\n" +
+  "   <part name='inputStringArray' type='types:ArrayOfstring'/>\n" +
+  " </message>\n" +
+  " <message name='countItemsResponse'>\n" +
+  "   <part name='return' type='xsd:int'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- 3.4.18 isNil rpc operation -->\n" +
+  " <message name='isNilRequest'>\n" +
+  "   <part name='inputString' type='xsd:string'/>\n" +
+  " </message>\n" +
+  " <message name='isNilResponse'>\n" +
+  "   <part name='return' type='xsd:boolean'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- DataHolder header block -->\n" +
+  " <message name='DataHolderRequest'>\n" +
+  "   <part name='DataHolder' type='test:DataHolder_t'/>\n" +
+  " </message>\n" +
+  " <message name='DataHolderResponse'>\n" +
+  "   <part name='DataHolder' type='test:DataHolder_t'/>\n" +
+  " </message>\n" +
+  "\n" +
+  " <!-- empty message for doc/literal testing -->\n" +
+  " <message name='emptyBodyRequest'/>\n" +
+  " <message name='emptyBodyResponse'/>\n" +
+  "\n" +
+  " <!-- echoOk body/header block -->\n" +
+  " <message name='echoOkRequest'>\n" +
+  "   <part name='echoOk' element='test:echoOk'/>\n" +
+  " </message>\n" +
+  " <message name='echoOkResponse'>\n" +
+  "   <part name='responseOk' element='test:responseOk'/>\n" +
+  " </message>\n" +
+  "\n" +
+  "\n" +
+  "   <portType name='Soap12TestPortTypeDoc'>\n" +
+  "       <operation name='emptyBody'>\n" +
+  "           <input message='tns:emptyBodyRequest' />\n" +
+  "           <output message='tns:emptyBodyResponse' />\n" +
+  "       </operation>\n" +
+  "       <operation name='echoOk'>\n" +
+  "           <input message='tns:echoOkRequest' />\n" +
+  "           <output message='tns:echoOkResponse' />\n" +
+  "       </operation>\n" +
+  " </portType>\n" +
+  "\n" +
+  " <portType name='Soap12TestPortTypeRpc'>\n" +
+  "\n" +
+  "   <!-- 3.4.1 returnVoid rpc operation -->\n" +
+  "   <operation name='returnVoid'>\n" +
+  "     <input message='tns:returnVoidRequest' name='returnVoid'/>\n" +
+  "     <output message='tns:returnVoidResponse' name='returnVoidResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.2 echoStruct rpc operation -->\n" +
+  "   <operation name='echoStruct' parameterOrder='inputStruct'>\n" +
+  "     <input message='tns:echoStructRequest' name='echoStruct'/>\n" +
+  "     <output message='tns:echoStructResponse' name='echoStructResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.3 echoStructArray rpc operation -->\n" +
+  "   <operation name='echoStructArray' parameterOrder='inputStructArray'>\n" +
+  "     <input message='tns:echoStructArrayRequest' name='echoStructArray'/>\n" +
+  "     <output message='tns:echoStructArrayResponse' name='echoStructArrayResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.4 echoStructAsSimpleTypes rpc operation -->\n" +
+  "   <operation name='echoStructAsSimpleTypes' parameterOrder='inputStruct outputString outputInteger outputFloat'>\n" +
+  "     <input message='tns:echoStructAsSimpleTypesRequest'/>\n" +
+  "     <output message='tns:echoStructAsSimpleTypesResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.5 echoSimpleTypesAsStruct rpc operation -->\n" +
+  "   <operation name='echoSimpleTypesAsStruct' parameterOrder='inputString inputInteger inputFloat'>\n" +
+  "     <input message='tns:echoSimpleTypesAsStructRequest'/>\n" +
+  "     <output message='tns:echoSimpleTypesAsStructResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.6 echoNestedStruct rpc operation -->\n" +
+  "   <operation name='echoNestedStruct' parameterOrder='inputStruct'>\n" +
+  "     <input message='tns:echoNestedStructRequest'/>\n" +
+  "     <output message='tns:echoNestedStructResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.7 echoNestedArray rpc operation -->\n" +
+  "   <operation name='echoNestedArray' parameterOrder='inputStruct'>\n" +
+  "     <input message='tns:echoNestedArrayRequest'/>\n" +
+  "     <output message='tns:echoNestedArrayResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.8 echoFloatArray rpc operation -->\n" +
+  "   <operation name='echoFloatArray' parameterOrder='inputFloatArray'>\n" +
+  "     <input message='tns:echoFloatArrayRequest' name='echoFloatArray'/>\n" +
+  "     <output message='tns:echoFloatArrayResponse' name='echoFloatArrayResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.9 echoStringArray rpc operation -->\n" +
+  "   <operation name='echoStringArray' parameterOrder='inputStringArray'>\n" +
+  "     <input message='tns:echoStringArrayRequest' name='echoStringArray'/>\n" +
+  "     <output message='tns:echoStringArrayResponse' name='echoStringArrayResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.10 echoIntegerArray rpc operation -->\n" +
+  "   <operation name='echoIntegerArray' parameterOrder='inputIntegerArray'>\n" +
+  "     <input message='tns:echoIntegerArrayRequest' name='echoIntegerArray'/>\n" +
+  "     <output message='tns:echoIntegerArrayResponse' name='echoIntegerArrayResponse'/>\n" +
+  "   </operation>\n" +
+  "\n" +
+  "   <!-- 3.4.11 echoBase64 rpc operation -->\n" +
+  "   <operation name='echoBase64' parameterOrder='inputBase64'>\n" +

[... 5103 lines stripped ...]


---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org