Project

Profile

Help

validation XSD 1.1 with eclispe is not working » SchemaValidatorHandlerExample_MMArbeitsversion.java

Mario Mueller, 2018-03-20 06:15

 
package saxon;
import org.w3c.dom.TypeInfo;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.TypeInfoProvider;
import javax.xml.validation.ValidatorHandler;
import java.io.File;

/**
* SchemaValidatorHandlerExample demonstrates the use of jaxp validation apis.
*
* This version was modified by Michael Kay from the sample application named SchemaValidator
* issued with the JAXP 1.3 distribution. It has been changed to use a ValidatorHandler
* and to display the types of elements and attributes as reported.
*
* The original file contained no explicit terms and conditions or copyright statement,
* but it should be assumed that it is subject to the usual Apache rules.
*/

public class SchemaValidatorHandlerExample_MMArbeitsversion {

/**
* Main entry point. Expects two arguments: the schema document, and the source document.
* Allows "--" as the schema document, indicating that the schema is identified by xsi:schemaLocation
* @param args
*/
public static void main(String [] args) {
try {
// if(args.length != 2){
// printUsage();
// return;
// }

SchemaFactory schemaFactory;

// Set a system property to force selection of the Saxon SchemaFactory implementation
// This is commented out because it shouldn't be necessary if Saxon-EE is on the classpath;
// but in the event of configuration problems, try reinstating it.

// System.setProperty("javax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema",
// "com.saxonica.ee.jaxp.SchemaFactoryImpl");
System.setProperty("javax.xml.validation.SchemaFactory:http://www.w3.org/XML/XMLSchema/v1.1",
"com.saxonica.ee.jaxp.SchemaFactoryImpl");

schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
//Mario
System.out.println("Loaded schema validation provider " + schemaFactory.getClass().getName());
System.err.println("Loaded schema validation provider " + schemaFactory.getClass().getName());

LocalErrorHandler errorHandler = new LocalErrorHandler();
schemaFactory.setErrorHandler(errorHandler);
//create a grammar object.
Schema schemaGrammar;

// if (args[0].equals("--")) {
// // in this case, the schema must be identified using xsi:schemaLocation
// schemaGrammar = schemaFactory.newSchema();
// } else {
// schemaGrammar = schemaFactory.newSchema(new File(args[0]));
// System.err.println("Created Grammar object for schema : "+args[0]);
// }

schemaGrammar = schemaFactory.newSchema(new File("001_externalFiles/Mario_UTILMD_RD.xsd"));
if (schemaGrammar==null) {
System.out.println("schemaGrammar==null");
return;
}
String xmlName = "001_externalFiles/TestFile_WithAsserts.xml";
Resolver resolver = new Resolver();

//create a validator to validate against the schema.
ValidatorHandler schemaValidator = schemaGrammar.newValidatorHandler();
schemaValidator.setResourceResolver(resolver);
schemaValidator.setErrorHandler(errorHandler);
schemaValidator.setContentHandler(new LocalContentHandler(schemaValidator.getTypeInfoProvider()));

// System.err.println("Validating "+args[1] +" against grammar "+args[0]);
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setNamespaceAware(true);
SAXParser parser = parserFactory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(schemaValidator);
// reader.parse(new InputSource(new File(args[1]).toURI().toString()));
// File xmlFile = new File(args[1]);
File xmlFile = new File(xmlName);
if (xmlFile==null) {
System.out.println("xmlFile==null");
return;
}
// MM
String xmlFileToUri = xmlFile.toURI().toString();
System.out.println("Gelesenes File \t"+xmlFileToUri);
reader.parse(new InputSource(xmlFileToUri));

// Note: It appears Xerces exits normally if validation errors were found. Saxon throws an exception.

int errorCount = errorHandler.getErrorCount();
if (errorCount == 0) {
System.err.println("Validation successful");
} else {
System.err.println("Validation complete: found " + errorCount + " error" + (errorCount==1?"":"s"));
}
} catch (SAXException saxe) {
exit(1, "Error: " + saxe.getMessage());
} catch (Exception e) {
e.printStackTrace();
exit(2, "Fatal Error: " + e);
}
}
/**
* Class is never instantiated
*/
private SchemaValidatorHandlerExample_MMArbeitsversion() {}

/**
* A custom SAX error handler
*/

protected static class LocalErrorHandler implements ErrorHandler {

private int errorCount = 0;

/**
* Report a non-fatal error
* @param ex the error condition
*/
public void error(SAXParseException ex) {
System.err.println("At line " + ex.getLineNumber() + " of " + ex.getSystemId() + ':');
System.err.println(ex.getMessage());
errorCount++;
}

/**
* Report a fatal error
* @param ex the error condition
*/

public void fatalError(SAXParseException ex) {
System.err.println("At line " + ex.getLineNumber() + " of " + ex.getSystemId() + ':');
System.err.println(ex.getMessage());
errorCount++;
}

/**
* Report a warning
* @param ex the warning condition
*/
public void warning(SAXParseException ex) {
System.err.println("At line " + ex.getLineNumber() + " of " + ex.getSystemId() + ':');
System.err.println(ex.getMessage());
}

/**
* Get the error count
* @return the number of errors reported, that is, the number of calls on error() or fatalError()
*/

public int getErrorCount() {
return errorCount;
}

}

/**
* Inner class to implement a resource resolver. This version always returns null, which
* has the same effect as not supplying a resource resolver at all. The LSResourceResolver
* is part of the DOM Level 3 load/save module.
*/

protected static class Resolver implements LSResourceResolver{

/**
* Resolve a reference to a resource
* @param type The type of resource, for example a schema, source XML document, or query
* @param namespace The target namespace (in the case of a schema document)
* @param publicId The public ID
* @param systemId The system identifier (as written, possibly a relative URI)
* @param baseURI The base URI against which the system identifier should be resolved
* @return an LSInput object typically containing the character stream or byte stream identified
* by the supplied parameters; or null if the reference cannot be resolved or if the resolver chooses
* not to resolve it.
*/

public LSInput resolveResource(String type, String namespace, String publicId, String systemId, String baseURI) {
return null;
}

}

/**
* A ContentHandler to receive and display the results
*/

public static class LocalContentHandler extends DefaultHandler {

int indent = 0;
private TypeInfoProvider provider;

public LocalContentHandler(TypeInfoProvider provider) {
this.provider = provider;
}

/**
* Receive notification of the start of an element.
*/
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
TypeInfo etype = provider.getElementTypeInfo();
StringBuffer sb = new StringBuffer(100);
for (int i=0; i<indent; i++) {
sb.append(" ");
}
sb.append("Element " + qName);
sb.append(" of type {" + etype.getTypeNamespace() + '}' + etype.getTypeName());
System.out.println(sb.toString());
for (int a=0; a<attributes.getLength(); a++) {
TypeInfo atype = provider.getAttributeTypeInfo(a);
boolean spec = provider.isSpecified(a);
sb.setLength(0);
for (int i=0; i<indent+2; i++) {
sb.append(" ");
}
sb.append("Attribute " + attributes.getQName(a) + (spec ? " (specified)" : " (defaulted)"));
if (atype == null) {
sb.append(" of unknown type");
} else {
sb.append(" of type {" + atype.getTypeNamespace() + '}' + atype.getTypeName());
}
System.out.println(sb.toString());
}
indent++;
}

/**
* Receive notification of the end of an element.
*/
public void endElement(String uri, String localName, String qName) throws SAXException {
indent--;
}
}


private static void exit(int errCode, String msg) {
System.err.println(msg);
System.exit(errCode);
}

public static void printUsage(){
System.err.println("Usage : java SchemaValidatorHandlerExample (<schemaFile>|--) <xmlFile>");
}
}
(1-1/3)