Validation of elements does not add a PSVI data
-----------------------------------------------

                 Key: XERCESJ-1387
                 URL: https://issues.apache.org/jira/browse/XERCESJ-1387
             Project: Xerces2-J
          Issue Type: Bug
          Components: XML Schema API
    Affects Versions: 2.9.1
         Environment: Java 1.6.0_10 Windows Vista Business
            Reporter: Stefan Chodnik


Test code:
import java.io.File;
import java.io.IOException;

import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;

import org.apache.xerces.xs.ElementPSVI;
import org.apache.xerces.xs.XSElementDeclaration;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.bootstrap.DOMImplementationRegistry;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

class ValidationTest {
        public static final String namespace = "http://www.example.org/schema/";;
        private Schema schema;
        private Document document;
        private Validator validator;
        private Element item;
        private Element foo;

        public static void main(String[] args) {
                System.out.println("ValidationTest start");
                ValidationTest testClass = new ValidationTest();
                testClass.doTest();
        }

        private void doTest() {
                createSchema();
                buildDocument();
                try {
                        validator.validate(new DOMSource(document), new 
DOMResult(document));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                addItemNode();
                addFooNode();
                
        }

        

        private void addFooNode() {
                foo = document.createElementNS(namespace, "foo");
                item.appendChild(foo);
                ElementPSVI elementPSVI;
                try {
                        validator.validate(new DOMSource(foo), new 
DOMResult(foo));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                elementPSVI=(ElementPSVI) foo;
                XSElementDeclaration declaration = 
elementPSVI.getElementDeclaration();
                if(declaration==null){
                        System.out.println("declaration==null //3");
                }
                
                
                try {
                        validator.validate(new DOMSource(item), new 
DOMResult(item));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                elementPSVI=(ElementPSVI) foo;
                declaration = elementPSVI.getElementDeclaration();
                if(declaration==null){
                        System.out.println("declaration==null //4");
                }
                
                try {
                        validator.validate(new 
DOMSource(document.getDocumentElement()), new 
DOMResult(document.getDocumentElement()));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                elementPSVI=(ElementPSVI) foo;
                declaration = elementPSVI.getElementDeclaration();
                if(declaration==null){
                        System.out.println("declaration==null //5");
                }
                
        }

        private void addItemNode() {
                item = document.createElementNS(namespace, "item");
                document.getDocumentElement().appendChild(item);
                ElementPSVI elementPSVI;
                try {
                        validator.validate(new DOMSource(item), new 
DOMResult(item));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                elementPSVI=(ElementPSVI) item;
                XSElementDeclaration declaration = 
elementPSVI.getElementDeclaration();
                if(declaration==null){
                        System.out.println("declaration==null //1");
                }
                
                try {
                        validator.validate(new 
DOMSource(document.getDocumentElement()), new 
DOMResult(document.getDocumentElement()));
                } catch (SAXException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
                elementPSVI=(ElementPSVI) item;
                declaration = elementPSVI.getElementDeclaration();
                if(declaration==null){
                        System.out.println("declaration==null //2");
                }
                
        }

        private void createSchema() {
                SchemaFactory factory = SchemaFactory
                                
.newInstance("http://www.w3.org/2001/XMLSchema";);
                try {
                        schema = factory.newSchema(new File("schema.xsd"));
                        validator = schema.newValidator();
                        validator.setErrorHandler(new ErrorHandler() {
                                @Override
                                public void error(SAXParseException exception) 
throws SAXException {
                                }

                                @Override
                                public void fatalError(SAXParseException 
exception)
                                                throws SAXException {
                                }

                                @Override
                                public void warning(SAXParseException exception)
                                                throws SAXException {
                                }
                        });
                } catch (SAXException e) {
                        e.printStackTrace();
                }
        }

        private void buildDocument() {
                System.setProperty(DOMImplementationRegistry.PROPERTY,
                                
"org.apache.xerces.dom.DOMXSImplementationSourceImpl");
                DOMImplementationRegistry registry;

                try {
                        registry = DOMImplementationRegistry.newInstance();

                        DOMImplementation impl = (DOMImplementation) registry
                                        .getDOMImplementation("psvi 1.0");
                        document = impl.createDocument(namespace, "root", null);
                } catch (ClassCastException e) {
                        e.printStackTrace();
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                } catch (InstantiationException e) {
                        e.printStackTrace();
                } catch (IllegalAccessException e) {
                        e.printStackTrace();
                }
        }
}

Loaded schema ,file schema.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
elementFormDefault="qualified" xmlns="http://www.example.org/schema/";
        targetNamespace="http://www.example.org/schema/";>
        <xs:element name="root">
                <xs:complexType>
                        <xs:sequence>
                                <xs:element name="item">
                                        <xs:complexType>
                                                <xs:sequence>
                                                        <xs:element name="foo" 
type="xs:string"></xs:element>
                                                        <xs:element name="bar" 
type="xs:string"></xs:element>
                                                </xs:sequence>
                                        </xs:complexType>
                                </xs:element>
                        </xs:sequence>
                </xs:complexType>
        </xs:element>
</xs:schema>

Compile and run commands:
javac -cp .;./xercesImpl.jar ValidationTest.java
java -cp .;./xercesImpl.jar ValidationTest

Result:

ValidationTest start
declaration==null //1
declaration==null //3
declaration==null //4

When the element is other than document element there is no information about 
this element declaration. Using document or documentElement to construct 
DOMSource and DOMResult makes it works fine.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to