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

#ifndef __gnu_xml_dom_JAXPFactory$JAXPBuilder__
#define __gnu_xml_dom_JAXPFactory$JAXPBuilder__

#pragma interface

#include <javax/xml/parsers/DocumentBuilder.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
          class Consumer;
          class DomImpl;
          class JAXPFactory;
          class JAXPFactory$JAXPBuilder;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class DOMImplementation;
          class Document;
      }
    }
    namespace xml
    {
      namespace sax
      {
          class EntityResolver;
          class ErrorHandler;
          class InputSource;
          class SAXParseException;
          class XMLReader;
      }
    }
  }
}

class gnu::xml::dom::JAXPFactory$JAXPBuilder : public ::javax::xml::parsers::DocumentBuilder
{

public: // actually package-private
  JAXPFactory$JAXPBuilder(::org::xml::sax::XMLReader *, ::gnu::xml::dom::JAXPFactory *);
public:
  ::org::w3c::dom::Document * parse(::org::xml::sax::InputSource *);
  jboolean isNamespaceAware();
  jboolean isValidating();
  void setEntityResolver(::org::xml::sax::EntityResolver *);
  void setErrorHandler(::org::xml::sax::ErrorHandler *);
  ::org::w3c::dom::DOMImplementation * getDOMImplementation();
  ::org::w3c::dom::Document * newDocument();
  void fatalError(::org::xml::sax::SAXParseException *);
  void error(::org::xml::sax::SAXParseException *);
  void warning(::org::xml::sax::SAXParseException *);
private:
  ::gnu::xml::dom::Consumer * __attribute__((aligned(__alignof__( ::javax::xml::parsers::DocumentBuilder)))) consumer;
  ::org::xml::sax::XMLReader * producer;
  ::gnu::xml::dom::DomImpl * impl;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_JAXPFactory$JAXPBuilder__
