DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13420>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13420

Complex Validation not catching error

           Summary: Complex Validation not catching error
           Product: Xerces2-J
           Version: 2.1.0
          Platform: PC
        OS/Version: Windows NT/2K
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: DOM
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


JAVA LISTING (A)
----------------
import org.w3c.dom.*;
import org.apache.xerces.parsers.*;
import org.xml.sax.InputSource;
import java.io.*;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class Validate implements ErrorHandler {

        public static void main(String[] args) throws Exception {
                try {
                        InputSource src = new InputSource(new FileInputStream
("envelope.xml"));
                        DOMParser parser = new DOMParser();
                        parser.setFeature
("http://xml.org/sax/features/validation",true);
                        parser.setFeature
("http://apache.org/xml/features/validation/schema",true);
                        parser.setFeature
("http://apache.org/xml/features/validation/dynamic";, true);
                        String schemas = "urn:xml-soap-address-demo address.xsd 
http://schemas.xmlsoap.org/soap/envelope/ 
http://schemas.xmlsoap.org/soap/envelope/";;
                        parser.setProperty
("http://apache.org/xml/properties/schema/external-schemaLocation",schemas);
                        parser.setErrorHandler(new Validate());
                        parser.parse(src);
                        Document doc = parser.getDocument();
                        Node root = doc.getDocumentElement();
                        System.out.println("ROOT: " + root.getNodeName());
                } catch (Exception e) {
                        System.out.println("Exc: " + e.getMessage());
                        e.printStackTrace();
                }
        }

        public void error(SAXParseException e) throws SAXException {
                System.out.println("ERROR: " + e.getMessage());
        }

        public void fatalError(SAXParseException e) throws SAXException {
                System.out.println("FATAL ERROR: " + e.getMessage());
        }

        public void warning(SAXParseException e) throws SAXException {
                System.out.println("WARNING: " + e.getMessage());
        }

}

INSTANCE DOCUMENT (B) envelope.xml
---------------------
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
                                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance"
                                   xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
        <SOAP-ENV:Body>
                <ns1:addEntry xmlns:ns1="urn:AddressFetcher" SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";>
                        <nameToRegister 
xsi:type="xsd:string">Ben</nameToRegister>
                        <xaddress xmlns:ns2="urn:xml-soap-address-demo" 
xsi:type="ns2:address">
                                <city xsi:type="xsd:string">Cambridge</city>
                                <phoneNumber xsi:type="ns2:phone">
                                        <areaCode 
xsi:type="xsd:int">607</areaCode>
                                        <exchange 
xsi:type="xsd:string">339</exchange>
                                        <number 
xsi:type="xsd:string">1540</number>
                                </phoneNumber>
                                <state xsi:type="xsd:string">MA</state>
                                <streetName 
xsi:type="xsd:string">JFK</streetName>
                                <streetNum xsi:type="xsd:int">50</streetNum>
                                <zip xsi:type="xsd:int">2138</zip>
                        </xaddress>
                </ns1:addEntry>
        </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

XML SCHEMA (C) address.xsd
--------------

<xsd:schema targetNamespace="urn:xml-soap-address-demo" xmlns:tns="urn:xml-soap-
address-demo" xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
        <xsd:complexType name="address">
                <xsd:all>
                        <xsd:element name="city" type="xsd:string"/>
                        <xsd:element name="phoneNumber" type="tns:phone"/>
                        <xsd:element name="state" type="xsd:string"/>
                        <xsd:element name="streetName" type="xsd:string"/>
                        <xsd:element name="streetNum" type="xsd:int"/>
                        <xsd:element name="zips" type="xsd:int"/>
                </xsd:all>
        </xsd:complexType>
        <xsd:complexType name="phone">
                <xsd:all>
                        <xsd:element name="areaCode" type="xsd:int"/>
                        <xsd:element name="exchange" type="xsd:string"/>
                        <xsd:element name="number" type="xsd:string"/>
                </xsd:all>
        </xsd:complexType>
</xsd:schema>

BUG DESCRIPTION
---------------

When I run the java code in (A), no validation errors are reported on instance 
document (B).  However, notice that the schema document specifies "zips" and 
the instance document has element <zip>.  When I turn off the dynamic 
validation feature, the proper validation error is reported.  So for some 
reason, the dynamic validation is ignoring part of a complex type even though a 
grammar exists for that type.  If this is not a bug, please advise.  Thanks you.

       Ben Szekely
  IBM Internet Technologies

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

Reply via email to