
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_xml_util_DoParse__
#define __gnu_xml_util_DoParse__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace pipeline
      {
          class EventConsumer;
      }
      namespace util
      {
          class DoParse;
      }
    }
  }
  namespace org
  {
    namespace xml
    {
      namespace sax
      {
          class SAXParseException;
      }
    }
  }
}

class gnu::xml::util::DoParse : public ::java::lang::Object
{

  DoParse();
public:
  static void main(JArray< ::java::lang::String * > *);
private:
  static jboolean hasValidator(::gnu::xml::pipeline::EventConsumer *);
  static ::java::lang::String * printParseException(::java::lang::String *, ::org::xml::sax::SAXParseException *);
public: // actually package-private
  static jint access$0();
  static void access$1(jint);
  static ::java::lang::String * access$2(::java::lang::String *, ::org::xml::sax::SAXParseException *);
  static jint access$3();
  static void access$4(jint);
  static ::org::xml::sax::SAXParseException * access$5();
  static void access$6(::org::xml::sax::SAXParseException *);
private:
  static ::org::xml::sax::SAXParseException * fatal;
  static jint errorCount;
  static jint fatalCount;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_util_DoParse__
