Author: lmandel
Date: Sun Dec  4 13:32:27 2005
New Revision: 353916

URL: http://svn.apache.org/viewcvs?rev=353916&view=rev
Log:
Added validation and tests for assertions Schema-0016, Schema-0020, 
Schema-0020b.

Modified:
    incubator/woden/java/src/org/apache/woden/internal/Messages.properties
    
incubator/woden/java/src/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidator.java
    
incubator/woden/java/test/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidatorTest.java

Modified: incubator/woden/java/src/org/apache/woden/internal/Messages.properties
URL: 
http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/Messages.properties?rev=353916&r1=353915&r2=353916&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/internal/Messages.properties 
(original)
+++ incubator/woden/java/src/org/apache/woden/internal/Messages.properties Sun 
Dec  4 13:32:27 2005
@@ -124,7 +124,7 @@
 MessageLabel-0015 = 
 MessageLabel-0015.assertion =  If the messageLabel attribute information item  
of a binding fault reference element information item  is absent then there 
MUST be a unique placeholder message with {direction} equal to the message 
direction.
 
-Schema-0016 = XML Schema component '{0}' has been referenced but its namespace 
is not available. In order to reference components from a XML Schema it must be 
imported or defined inline.
+Schema-0016 = A component in the XML Schema namespace '{0}' has been 
referenced but this namespace is not available. In order to reference 
components from a XML Schema namespace the namespace must be imported or 
defined inline.
 Schema-0016.assertion = A WSDL 2.0 document MUST NOT refer to XML Schema 
components in a given namespace unless an xs:import or xs:schema element 
information item for that namespace is present or the namespace is the XML 
Schema namespace which contains built-in types as defined in XML Schema Part 2: 
Datatypes Second Edition [XML Schema: Datatypes].
 
 # schema-0017 is a replacement for WSDL501
@@ -146,9 +146,13 @@
 Schema-0019 = The XML schema does not define a target namespace. A target 
namespace must be defined on all WSDL 2.0 inlined XML Schemas.
 Schema-0019.assertion =  The xs:schema element information item MUST contain a 
targetNamespace attribute information item.
 
-# This assertion is for interface message reference or fault
-Schema-0020 = 
+# This assertion is for interface message reference
+Schema-0020 = The message reference '{0}' refers to the type definition '{1}'. 
A message reference must refer to an element definition. 
 Schema-0020.assertion = An element attribute information item MUST NOT refer 
to a global xs:simpleType or xs:complexType definition.
+
+# This assertion is for interface fault
+Schema-0020b = The fault '{0}' refers to the type definition '{1}'. A fault 
must refer to an element definition. 
+Schema-0020b.assertion = An element attribute information item MUST NOT refer 
to a global xs:simpleType or xs:complexType definition.
 
 Schema-0021 = The alternative schema language makes use of the XML Schema 
namespace.
 Schema-0021.assertion = A specification of extension syntax for an alternative 
schema language MUST use a namespace that is different than the namespace of 
XML Schema.

Modified: 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidator.java
URL: 
http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidator.java?rev=353916&r1=353915&r2=353916&view=diff
==============================================================================
--- 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidator.java
 (original)
+++ 
incubator/woden/java/src/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidator.java
 Sun Dec  4 13:32:27 2005
@@ -26,11 +26,16 @@
 import org.apache.woden.ErrorReporter;
 import org.apache.woden.WSDLException;
 import org.apache.woden.internal.ErrorLocatorImpl;
+import org.apache.woden.internal.wsdl20.Constants;
 import org.apache.woden.schema.ImportedSchema;
 import org.apache.woden.schema.InlinedSchema;
+import org.apache.woden.schema.Schema;
 import org.apache.woden.wsdl20.xml.DescriptionElement;
 import org.apache.woden.wsdl20.xml.ImportElement;
 import org.apache.woden.wsdl20.xml.InterfaceElement;
+import org.apache.woden.wsdl20.xml.InterfaceFaultElement;
+import org.apache.woden.wsdl20.xml.InterfaceMessageReferenceElement;
+import org.apache.woden.wsdl20.xml.InterfaceOperationElement;
 import org.apache.woden.wsdl20.xml.TypesElement;
 import org.apache.ws.commons.schema.XmlSchemaObjectTable;
 
@@ -70,7 +75,7 @@
        if(!validateTypes(descElement.getTypesElement(), errorReporter))
          isValid = false;
        
-       if(!validateInterfaces(descElement.getInterfaceElements(), 
errorReporter))
+       if(!validateInterfaces(descElement, descElement.getInterfaceElements(), 
errorReporter))
          isValid = false;
 
                // 1. Call the validators for specific namespaces
@@ -139,7 +144,7 @@
    * @return True if all the interface related assertions pass, false 
otherwise.
    * @throws WSDLException
    */
-  protected boolean validateInterfaces(InterfaceElement[] interfaces, 
ErrorReporter errorReporter) throws WSDLException
+  protected boolean validateInterfaces(DescriptionElement descElement, 
InterfaceElement[] interfaces, ErrorReporter errorReporter) throws WSDLException
   {
        boolean isValid = true;
        
@@ -150,12 +155,47 @@
          
          if(!testAssertionInterface0031(interfaceElem, errorReporter))
                isValid = false;
+         
+         InterfaceFaultElement[] faultElements = 
interfaceElem.getInterfaceFaultElements();
+         int numFaultElements = faultElements.length;
+         for(int j = 0; j < numFaultElements; j++)
+         {
+               InterfaceFaultElement faultElement = faultElements[j];
+               if(!testAssertionSchema0020b(descElement, faultElement, 
errorReporter))
+             isValid = false;
+               if(!testAssertionSchema0016(descElement, 
faultElement.getElementName().getNamespaceURI(), errorReporter))
+             isValid = false;
+         }
+         
+         
+         InterfaceOperationElement[] interfaceOperations = 
interfaceElem.getInterfaceOperationElements();
+         int numInterfaceOperations = interfaceOperations.length;
+         for(int j = 0; j < numInterfaceOperations; j++)
+         {
+               InterfaceOperationElement interfaceOperation = 
interfaceOperations[j];
+               InterfaceMessageReferenceElement[] messageReferences = 
interfaceOperation.getMessageReferenceElements();
+               int numMessageReferences = messageReferences.length;
+               for(int k = 0; k < numMessageReferences; k++)
+               {
+             InterfaceMessageReferenceElement messageReference = 
messageReferences[k];
+             if(!testAssertionSchema0020(descElement, messageReference, 
errorReporter))
+               isValid = false;
+             if(!testAssertionSchema0016(descElement, 
messageReference.getElementName().getNamespaceURI(), errorReporter))
+               isValid = false;
+               }
+               
+//             FaultReferenceElement[] faultReferences = 
interfaceOperation.getFaultReferenceElements();
+//             int numFaultReferences = faultReferences.length;
+//             for(int k = 0; k < numFaultReferences; k++)
+//             {
+//           FaultReferenceElement faultReference = faultReferences[k];
+//           if(!testAssertionSchema0020b(descElement, faultReference, 
errorReporter))
+//             isValid = false;
+//             }
+         }
        }
-//     # This assertion is for interface message reference or fault
-//     Schema-0020 = 
-//     Schema-0020.ref = 3.1.3
-//     Schema-0020.assertion = An element attribute information item MUST NOT 
refer to a global xs:simpleType or xs:complexType definition.
-//
+
+       // The message label assertions use MEP definitions.
 //     MessageLabel-0004 = 
 //     MessageLabel-0004.assertion = The messageLabel attribute information 
item of an interface message reference element information item MUST be present 
if the message exchange pattern has more than one placeholder message with 
{direction} equal to the message direction.
        //
@@ -397,8 +437,99 @@
        }
        return isValid;
   }
+  
+  /**
+   * Test assertion Schema-0020. An interface message reference element must
+   * not refer to an xs:simpleType or xs:complexType.
+   * 
+   * @param descElement The description element of the document.
+   * @param messageReference The message reference to check.
+   * @param errorReporter The error Reporter.
+   * @return True if the assertion passes, false otherwise.
+   * @throws WSDLException
+   */
+  protected boolean testAssertionSchema0020(DescriptionElement descElement, 
InterfaceMessageReferenceElement messageReference, ErrorReporter errorReporter) 
throws WSDLException
+  {
+    if(messageReference.getElement() == null)
+    {
+      QName elementName = messageReference.getElementName();
+      if(descElement.toComponent().getTypeDefinition(elementName) != null)
+      {
+       errorReporter.reportError(new ErrorLocatorImpl(), "Schema-0020", new 
Object[]{messageReference.getMessageLabel(), elementName}, 
ErrorReporter.SEVERITY_ERROR);
+           return false;
+      }
+    }
+    return true;
+  }
+  
+  /**
+   * Test assertion Schema-0020. An interface fault element must
+   * not refer to an xs:simpleType or xs:complexType.
+   * 
+   * @param descElement The description element of the document.
+   * @param faultElement The fault element to check.
+   * @param errorReporter The error Reporter.
+   * @return True if the assertion passes, false otherwise.
+   * @throws WSDLException
+   */
+  protected boolean testAssertionSchema0020b(DescriptionElement descElement, 
InterfaceFaultElement faultElement, ErrorReporter errorReporter) throws 
WSDLException
+  {
+    if(faultElement.getElement() == null)
+    {
+      QName elementName = faultElement.getElementName();
+      if(descElement.toComponent().getTypeDefinition(elementName) != null)
+      {
+       errorReporter.reportError(new ErrorLocatorImpl(), "Schema-0020b", new 
Object[]{faultElement.getName(), elementName}, ErrorReporter.SEVERITY_ERROR);
+           return false;
+      }
+    }
+    return true;
+  }
+  
+  /**
+   * Test assertion Schema-0016. References to XML schema components must only 
refer
+   * to elements and types in namespaces that have been imported or inlined or 
that
+   * are part of the XML schema namespace.
+   * 
+   * @param descElement The description element of the document.
+   * @param namespace Check this namespace to see if it has been defined.
+   * @param errorReporter The error Reporter.
+   * @return True if the assertion passes, false otherwise.
+   * @throws WSDLException
+   */
+  protected boolean testAssertionSchema0016(DescriptionElement descElement, 
String namespace, ErrorReporter errorReporter) throws WSDLException
+  {
+    if(!namespace.equals(Constants.TYPE_XSD_2001))
+    {
+      TypesElement types = descElement.getTypesElement();
+      if(types == null)
+      {
+       errorReporter.reportError(new ErrorLocatorImpl(), "Schema-0016", new 
Object[]{namespace}, ErrorReporter.SEVERITY_ERROR);
+        return false;
+      }
+      Schema[] schemas = types.getSchemas();
+      int numSchemas = schemas.length;
+      boolean schemaNotFound = true;
+      // TODO: This linear search should be improved for performance.
+      for(int i = 0; i < numSchemas; i++)
+      {
+       if(schemas[i].getNamespace().toString().equals(namespace))
+       {
+          schemaNotFound = false;
+         break;
+       }
+      }
+      if(schemaNotFound)
+      {
+        errorReporter.reportError(new ErrorLocatorImpl(), "Schema-0016", new 
Object[]{namespace}, ErrorReporter.SEVERITY_ERROR);
+       return false;
+      } 
+    }
+    return true;
+  }
 
-  //Schema-0016 = XML Schema component '{0}' has been referenced but its 
namespace is not available. In order to reference components from a XML Schema 
it must be imported or defined inline.
+  // # may also be needed for binding.
+  //Schema-0016 = A component in the XML Schema namespace '{0}' has been 
referenced but this namespace is not available. In order to reference 
components from a XML Schema namespace the namespace must be imported or 
defined inline.
 //     Schema-0016.ref = 3.1
 //     Schema-0016.assertion = A WSDL 2.0 document MUST NOT refer to XML 
Schema components in a given namespace unless an xs:import or xs:schema element 
information item for that namespace is present or the namespace is the XML 
Schema namespace which contains built-in types as defined in XML Schema Part 2: 
Datatypes Second Edition [XML Schema: Datatypes].
 

Modified: 
incubator/woden/java/test/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidatorTest.java
URL: 
http://svn.apache.org/viewcvs/incubator/woden/java/test/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidatorTest.java?rev=353916&r1=353915&r2=353916&view=diff
==============================================================================
--- 
incubator/woden/java/test/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidatorTest.java
 (original)
+++ 
incubator/woden/java/test/org/apache/woden/internal/wsdl20/validation/WSDLDocumentValidatorTest.java
 Sun Dec  4 13:32:27 2005
@@ -21,6 +21,8 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 
+import javax.xml.namespace.QName;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -31,10 +33,17 @@
 import org.apache.woden.internal.ErrorReporterImpl;
 import org.apache.woden.internal.schema.ImportedSchemaImpl;
 import org.apache.woden.internal.schema.InlinedSchemaImpl;
+import org.apache.woden.internal.wsdl20.Constants;
+import org.apache.woden.internal.wsdl20.DescriptionImpl;
 import org.apache.woden.internal.wsdl20.InterfaceImpl;
+import org.apache.woden.schema.ImportedSchema;
 import org.apache.woden.schema.InlinedSchema;
 import org.apache.woden.wsdl20.xml.DescriptionElement;
 import org.apache.woden.wsdl20.xml.InterfaceElement;
+import org.apache.woden.wsdl20.xml.InterfaceFaultElement;
+import org.apache.woden.wsdl20.xml.InterfaceMessageReferenceElement;
+import org.apache.woden.wsdl20.xml.InterfaceOperationElement;
+import org.apache.woden.wsdl20.xml.TypesElement;
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.xerces.parsers.DOMParser;
@@ -884,5 +893,343 @@
     }
   }
   
+  /**
+   * Test assertion Schema-0020. An interface message reference must not refer
+   * to an xs:simpleType or xs:complexType.
+   */
+  public void testTestAssertionSchema0020()
+  {
+       // Create a schema for use in the tests and add it to a types section.
+       TypesElement types = new DescriptionImpl().createTypesElement();
+       String schemaString = "<schema 
xmlns=\"http://www.w3.org/2001/XMLSchema\"; 
targetNamespace=\"http://www.sample.org\";>"
+                 + "<complexType name=\"myType\">"     
+                 + "<sequence>"     
+          + "<element  name=\"element\" type=\"string\"/>"      
+          + "</sequence>"     
+          + "</complexType>" 
+          +    "<element name=\"myElement\" type=\"string\"/>"
+          + "</schema>";
+       try
+       {
+         DOMParser builder = new DOMParser();
+         Reader reader = new StringReader(schemaString);
+      XMLInputSource is = new XMLInputSource(null,null,null,reader,null);
+      builder.parse(is);
+      Document schemaDoc1 = builder.getDocument();
+      XmlSchemaCollection xsc = new XmlSchemaCollection();
+      XmlSchema xs1 = xsc.read(schemaDoc1.getDocumentElement());
+      URI schemaNS = new URI("http://www.sample.org";);
+      InlinedSchema schema = new InlinedSchemaImpl();
+      schema.setSchemaDefinition(xs1);
+      schema.setNamespace(schemaNS);
+      types.addSchema(schema);
+       }
+       catch(Exception e)
+       {
+         fail("An error occurred while creating the sample types section.");
+       }
+    
+       // Test that an interface message reference with a reference to an 
element
+       // does not return an error.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceOperationElement interfaceOperation = 
descElem.createInterfaceOperationElement();
+      InterfaceMessageReferenceElement messageRef = 
descElem.createInterfaceMessageReferenceElement();
+      messageRef.setElementName(new QName("http://www.sample.org";, 
"myElement"));
+      interfaceOperation.addMessageReferenceElement(messageRef);
+      interfaceElem.addInterfaceOperationElement(interfaceOperation);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(!val.testAssertionSchema0020(descElem, messageRef, reporter))
+         {
+           fail("The testAssertionSchema0020 method returned false for an 
message reference that refers to a valid element.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that an interface message reference with a reference to an element
+       // that has not been defined does not return an error. This problem is 
checked
+       // by another assertion.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceOperationElement interfaceOperation = 
descElem.createInterfaceOperationElement();
+      InterfaceMessageReferenceElement messageRef = 
descElem.createInterfaceMessageReferenceElement();
+      messageRef.setElementName(new QName("http://www.sample.org";, 
"myElement2"));
+      interfaceOperation.addMessageReferenceElement(messageRef);
+      interfaceElem.addInterfaceOperationElement(interfaceOperation);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(!val.testAssertionSchema0020(descElem, messageRef, reporter))
+         {
+           fail("The testAssertionSchema0020 method returned false for an 
message reference that refers to an element that has not been defined.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that an interface message reference with a reference to a type
+       // returns an error. 
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceOperationElement interfaceOperation = 
descElem.createInterfaceOperationElement();
+      InterfaceMessageReferenceElement messageRef = 
descElem.createInterfaceMessageReferenceElement();
+      messageRef.setElementName(new QName("http://www.sample.org";, "myType"));
+      interfaceOperation.addMessageReferenceElement(messageRef);
+      interfaceElem.addInterfaceOperationElement(interfaceOperation);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(val.testAssertionSchema0020(descElem, messageRef, reporter))
+         {
+           fail("The testAssertionSchema0020 method returned true for an 
message reference that refers to a type.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+  }
   
+  /**
+   * Test assertion Schema-0020b. An interface fault must not refer
+   * to an xs:simpleType or xs:complexType.
+   */
+  public void testTestAssertionSchema0020b()
+  {
+       // Create a schema for use in the tests and add it to a types section.
+       TypesElement types = new DescriptionImpl().createTypesElement();
+       String schemaString = "<schema 
xmlns=\"http://www.w3.org/2001/XMLSchema\"; 
targetNamespace=\"http://www.sample.org\";>"
+                 + "<complexType name=\"myType\">"     
+                 + "<sequence>"     
+          + "<element  name=\"element\" type=\"string\"/>"      
+          + "</sequence>"     
+          + "</complexType>" 
+          +    "<element name=\"myElement\" type=\"string\"/>"
+          + "</schema>";
+       try
+       {
+         DOMParser builder = new DOMParser();
+         Reader reader = new StringReader(schemaString);
+      XMLInputSource is = new XMLInputSource(null,null,null,reader,null);
+      builder.parse(is);
+      Document schemaDoc1 = builder.getDocument();
+      XmlSchemaCollection xsc = new XmlSchemaCollection();
+      XmlSchema xs1 = xsc.read(schemaDoc1.getDocumentElement());
+      URI schemaNS = new URI("http://www.sample.org";);
+      InlinedSchema schema = new InlinedSchemaImpl();
+      schema.setSchemaDefinition(xs1);
+      schema.setNamespace(schemaNS);
+      types.addSchema(schema);
+       }
+       catch(Exception e)
+       {
+         fail("An error occurred while creating the sample types section.");
+       }
+    
+       // Test that an interface fault with a reference to an element
+       // does not return an error.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceFaultElement fault = descElem.createInterfaceFaultElement();
+      fault.setElementName(new QName("http://www.sample.org";, "myElement"));
+      interfaceElem.addInterfaceFaultElement(fault);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(!val.testAssertionSchema0020b(descElem, fault, reporter))
+         {
+           fail("The testAssertionSchema0020b method returned false for a 
fault that refers to a valid element.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that an interface fault with a reference to an element
+       // that has not been defined does not return an error. This problem is 
checked
+       // by another assertion.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceFaultElement fault = descElem.createInterfaceFaultElement();
+      fault.setElementName(new QName("http://www.sample.org";, "myElement2"));
+      interfaceElem.addInterfaceFaultElement(fault);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(!val.testAssertionSchema0020b(descElem, fault, reporter))
+         {
+           fail("The testAssertionSchema0020b method returned false for a 
fault that refers to an element that has not been defined.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that an interface message reference with a reference to a type
+       // returns an error. 
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      InterfaceElement interfaceElem = descElem.createInterfaceElement();
+      InterfaceFaultElement fault = descElem.createInterfaceFaultElement();
+      fault.setElementName(new QName("http://www.sample.org";, "myType"));
+      interfaceElem.addInterfaceFaultElement(fault);
+      descElem.addInterfaceElement(interfaceElem);
+      
+         if(val.testAssertionSchema0020b(descElem, fault, reporter))
+         {
+           fail("The testAssertionSchema0020b method returned true for a fault 
that refers to a type.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+  }
+  
+
+  /**
+   * Test assertion Schema-0016. References to XML schema components must only 
refer
+   * to elements and types in namespaces that have been imported or inlined or 
that
+   * are part of the XML schema namespace.
+   * 
+   * TODO: Implement tests for specific elements that contain invalid 
references.
+   *       These tests should probably be contained in a test method for 
validateInterfaces, validateBindings, etc.
+   */
+  public void testTestAssertionSchema0016()
+  {
+       // Create a schema for use in the tests and add it to a types section.
+       TypesElement types = new DescriptionImpl().createTypesElement();
+       String schemaString = "<schema 
xmlns=\"http://www.w3.org/2001/XMLSchema\"; 
targetNamespace=\"http://www.sample.org\";>"
+                 + "<complexType name=\"myType\">"     
+                 + "<sequence>"     
+          + "<element  name=\"element\" type=\"string\"/>"      
+          + "</sequence>"     
+          + "</complexType>" 
+          +    "<element name=\"myElement\" type=\"string\"/>"
+          + "</schema>";
+       XmlSchema xs1 = null;
+       URI schemaNS = null;
+       try
+       {
+         DOMParser builder = new DOMParser();
+         Reader reader = new StringReader(schemaString);
+      XMLInputSource is = new XMLInputSource(null,null,null,reader,null);
+      builder.parse(is);
+      Document schemaDoc1 = builder.getDocument();
+      XmlSchemaCollection xsc = new XmlSchemaCollection();
+      xs1 = xsc.read(schemaDoc1.getDocumentElement());
+      schemaNS = new URI("http://www.sample.org";);
+      InlinedSchema schema = new InlinedSchemaImpl();
+      schema.setSchemaDefinition(xs1);
+      schema.setNamespace(schemaNS);
+      types.addSchema(schema);
+       }
+       catch(Exception e)
+       {
+         fail("An error occurred while creating the sample types section.");
+       }
+    
+       // Test that a reference to a namespace that is defined inline
+       // does not return an error.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      descElem.setTypesElement(types);
+      
+         if(!val.testAssertionSchema0016(descElem, "http://www.sample.org";, 
reporter))
+         {
+           fail("The testAssertionSchema0016 method returned false for a 
namespace that has been defined inline.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that a reference to a namespace that is imported
+       // does not return an error.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      TypesElement typesImported = descElem.createTypesElement();
+      ImportedSchema importedSchema = new ImportedSchemaImpl();
+      importedSchema.setSchemaDefinition(xs1);
+      importedSchema.setNamespace(schemaNS);
+      typesImported.addSchema(importedSchema);
+      descElem.setTypesElement(typesImported);
+      
+         if(!val.testAssertionSchema0016(descElem, "http://www.sample.org";, 
reporter))
+         {
+           fail("The testAssertionSchema0016 method returned false for a 
namespace that has been imported.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that a reference to the XML Schema namespace does not return an 
error.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      //descElem.setTypesElement(types);
+      
+         if(!val.testAssertionSchema0016(descElem, Constants.TYPE_XSD_2001, 
reporter))
+         {
+           fail("The testAssertionSchema0016 method returned false for the XML 
Schema namespace.");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+       
+    // Test that a reference to a namespace that has not been defined inline 
or imported returns an error.
+       // This test also checks that the method functions correctly with no 
defined types element.
+       handler.reset();
+    try
+       {
+      DescriptionElement descElem = new DescriptionImpl();
+      //descElem.setTypesElement(types);
+      
+         if(val.testAssertionSchema0016(descElem, "http://www.sample2.org";, 
reporter))
+         {
+           fail("The testAssertionSchema0016 method returned true for a 
namespace that is not available..");
+         }
+       }
+       catch(WSDLException e)
+    {
+         fail("There was a problem running the test assertion method " + e);
+       }
+  }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to