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

#ifndef __javax_xml_parsers_DocumentBuilder__
#define __javax_xml_parsers_DocumentBuilder__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace xml
    {
      namespace parsers
      {
          class DocumentBuilder;
      }
      namespace validation
      {
          class Schema;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class DOMImplementation;
          class Document;
      }
    }
    namespace xml
    {
      namespace sax
      {
          class EntityResolver;
          class ErrorHandler;
          class InputSource;
      }
    }
  }
}

class javax::xml::parsers::DocumentBuilder : public ::java::lang::Object
{

public: // actually protected
  DocumentBuilder();
public:
  virtual ::org::w3c::dom::Document * parse(::java::io::InputStream *);
  virtual ::org::w3c::dom::Document * parse(::java::io::InputStream *, ::java::lang::String *);
  virtual ::org::w3c::dom::Document * parse(::java::lang::String *);
  virtual ::org::w3c::dom::Document * parse(::java::io::File *);
  virtual ::org::w3c::dom::Document * parse(::org::xml::sax::InputSource *) = 0;
  virtual jboolean isNamespaceAware() = 0;
  virtual jboolean isValidating() = 0;
  virtual void setEntityResolver(::org::xml::sax::EntityResolver *) = 0;
  virtual void setErrorHandler(::org::xml::sax::ErrorHandler *) = 0;
  virtual ::org::w3c::dom::Document * newDocument() = 0;
  virtual ::org::w3c::dom::DOMImplementation * getDOMImplementation() = 0;
  virtual void reset();
  virtual ::javax::xml::validation::Schema * getSchema();
  virtual jboolean isXIncludeAware();
  static ::java::lang::Class class$;
};

#endif // __javax_xml_parsers_DocumentBuilder__
