You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by zi...@apache.org on 2004/03/27 01:22:55 UTC

cvs commit: xml-xmlbeans/v2/bin svalidate

zieg        2004/03/26 16:22:55

  Modified:    v2/src/xmlpublic/org/apache/xmlbeans XmlError.java
  Added:       v2/src/xmlcomp/org/apache/xmlbeans/impl/tool
                        StreamInstanceValidator.java
               v2/bin   svalidate
  Log:
  add streaming validator util
  
  Revision  Changes    Path
  1.3       +14 -0     xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/XmlError.java
  
  Index: XmlError.java
  ===================================================================
  RCS file: /home/cvs/xml-xmlbeans/v2/src/xmlpublic/org/apache/xmlbeans/XmlError.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XmlError.java	12 Feb 2004 20:06:27 -0000	1.2
  +++ XmlError.java	27 Mar 2004 00:22:55 -0000	1.3
  @@ -409,4 +409,18 @@
   
           return sb.toString();
       }
  +
  +    public static String severityAsString(int severity)
  +    {
  +        switch (severity) {
  +            case SEVERITY_ERROR:
  +                return ("error");
  +            case SEVERITY_WARNING:
  +                return ("warning");
  +            case SEVERITY_INFO:
  +                return "info";
  +            default:
  +                throw new IllegalArgumentException("unknown severity");
  +        }
  +    }
   }
  
  
  
  1.1                  xml-xmlbeans/v2/src/xmlcomp/org/apache/xmlbeans/impl/tool/StreamInstanceValidator.java
  
  Index: StreamInstanceValidator.java
  ===================================================================
  /*   Copyright 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.xmlbeans.impl.tool;
  
  import org.apache.xmlbeans.SchemaTypeLoader;
  import org.apache.xmlbeans.XmlBeans;
  import org.apache.xmlbeans.XmlException;
  import org.apache.xmlbeans.XmlObject;
  import org.apache.xmlbeans.XmlOptions;
  import org.apache.xmlbeans.XmlError;
  import org.apache.xmlbeans.impl.validator.ValidatingXMLStreamReader;
  
  import javax.xml.stream.XMLInputFactory;
  import javax.xml.stream.XMLStreamReader;
  import javax.xml.stream.XMLStreamException;
  import javax.xml.stream.Location;
  import java.io.File;
  import java.io.FileInputStream;
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.Collections;
  import java.util.Iterator;
  import java.util.List;
  
  public class StreamInstanceValidator
  {
      private static final XMLInputFactory XML_INPUT_FACTORY = XMLInputFactory.newInstance();
  
      public static void main(String[] args)
      {
          CommandLine cl = new CommandLine(args, Collections.EMPTY_SET);
          if (cl.getOpt("license") != null) {
              CommandLine.printLicense();
              System.exit(0);
              return;
          }
          if (cl.args().length == 0) {
              System.out.println("Validates a schema defintion and instances within the schema.");
              System.out.println("Usage: validate [switches] schema.xsd instance.xml");
              System.out.println("Switches:");
              System.out.println("    -dl    enable network downloads for imports and includes");
              System.out.println("    -nopvr disable particle valid (restriction) rule");
              System.out.println("    -noupa diable unique particle attributeion rule");
              System.out.println("    -license prints license information");
              return;
          }
  
          boolean dl = (cl.getOpt("dl") != null);
          boolean nopvr = (cl.getOpt("nopvr") != null);
          boolean noupa = (cl.getOpt("noupa") != null);
  
          File[] schemaFiles = cl.filesEndingWith(".xsd");
          File[] instanceFiles = cl.filesEndingWith(".xml");
  
          List sdocs = new ArrayList();
  
          final XmlOptions options = (new XmlOptions()).setLoadLineNumbers();
          for (int i = 0; i < schemaFiles.length; i++) {
              try {
                  sdocs.add(
                      XmlObject.Factory.parse(
                          schemaFiles[i], options.setLoadMessageDigest()));
              }
              catch (Exception e) {
                  System.err.println(schemaFiles[i] + " not loadable: " + e);
              }
          }
  
          XmlObject[] schemas = (XmlObject[])sdocs.toArray(new XmlObject[0]);
  
          SchemaTypeLoader sLoader;
          Collection compErrors = new ArrayList();
          XmlOptions schemaOptions = new XmlOptions();
          schemaOptions.setErrorListener(compErrors);
          if (dl)
              schemaOptions.setCompileDownloadUrls();
          if (nopvr)
              schemaOptions.setCompileNoPvrRule();
          if (noupa)
              schemaOptions.setCompileNoUpaRule();
  
          try {
              sLoader = XmlBeans.loadXsd(schemas, schemaOptions);
          }
          catch (Exception e) {
              if (compErrors.isEmpty() || !(e instanceof XmlException)) {
                  e.printStackTrace(System.err);
              }
              System.out.println("Schema invalid");
              for (Iterator i = compErrors.iterator(); i.hasNext();)
                  System.out.println(i.next());
              return;
          }
  
          validateFiles(instanceFiles, sLoader, options);
  
      }
  
      public static void validateFiles(File[] instanceFiles,
                                       SchemaTypeLoader sLoader,
                                       final XmlOptions options)
      {
          final ValidatingXMLStreamReader vsr = new ValidatingXMLStreamReader();
          final Collection errors = new ArrayList();
  
          for (int i = 0; i < instanceFiles.length; i++) {
              final File file = instanceFiles[i];
              final String path = file.getPath();
  
              errors.clear();
  
              try {
                  final FileInputStream fis = new FileInputStream(file);
                  final XMLStreamReader rdr =
                      XML_INPUT_FACTORY.createXMLStreamReader(path, fis);
                  vsr.init(rdr, null, sLoader, options, errors);
                  while (vsr.hasNext()) {
                      vsr.next();
                  }
                  vsr.close();
                  fis.close();
              }
              catch (XMLStreamException xse) {
                  final Location loc = xse.getLocation();
                  XmlError e = XmlError.forLocation(xse.getMessage(), path,
                                                    loc.getLineNumber(),
                                                    loc.getColumnNumber(),
                                                    loc.getCharacterOffset());
                  errors.add(e);
              }
              catch (Exception e) {
                  System.err.println("error for file: " + file + ": " + e);
                  e.printStackTrace(System.err);
                  continue;
              }
  
  
              if (errors.isEmpty()) {
                  System.out.println(file + " valid.");
              } else {
                  System.out.println(file + " NOT valid:");
                  for (Iterator it = errors.iterator(); it.hasNext();) {
                      XmlError err = (XmlError)it.next();
                      System.out.println(stringFromError(err, path));
                  }
              }
  
          }
      }
  
      private static String stringFromError(XmlError err,
                                            final String path)
      {
          String s = XmlError.severityAsString(err.getSeverity()) +
              ": " +
              //err.getSourceName()
              path
              + ":" + err.getLine() + ":" + err.getColumn() + " " +
              err.getMessage() + " ";
          return s;
      }
  }
  
  
  
  1.1                  xml-xmlbeans/v2/bin/svalidate
  
  Index: svalidate
  ===================================================================
  #!/bin/sh
  #
  # Streaming Instance Validator
  #
  # Validates an instance against a schema.
  
  CP=
  CP=$CP:$XMLBEANS_HOME/build/ar/xbean.jar:$XMLBEANS_HOME/build/lib/jsr173_api.jar:$XMLBEANS_HOME/build/lib/jsr173_ri.jar:
  
  case "`uname`" in
      CYGWIN*)
          CP=`cygpath -w -p $CP`
          ;;
  esac
  
  exec java -classpath $CP org.apache.xmlbeans.impl.tool.StreamInstanceValidator $*
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org