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

#ifndef __javax_xml_stream_XMLInputFactory__
#define __javax_xml_stream_XMLInputFactory__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class EventFilter;
          class StreamFilter;
          class XMLEventReader;
          class XMLInputFactory;
          class XMLReporter;
          class XMLResolver;
          class XMLStreamReader;
        namespace util
        {
            class XMLEventAllocator;
        }
      }
      namespace transform
      {
          class Source;
      }
    }
  }
}

class javax::xml::stream::XMLInputFactory : public ::java::lang::Object
{

public: // actually protected
  XMLInputFactory();
public:
  static ::javax::xml::stream::XMLInputFactory * newInstance();
  static ::javax::xml::stream::XMLInputFactory * newInstance(::java::lang::String *, ::java::lang::ClassLoader *);
private:
  static ::java::lang::String * getFactoryClassName(::java::lang::ClassLoader *, jint);
public:
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::Reader *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::javax::xml::transform::Source *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::InputStream *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::io::InputStream *, ::java::lang::String *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::lang::String *, ::java::io::InputStream *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createXMLStreamReader(::java::lang::String *, ::java::io::Reader *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::Reader *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::lang::String *, ::java::io::Reader *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::javax::xml::stream::XMLStreamReader *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::javax::xml::transform::Source *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::InputStream *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::io::InputStream *, ::java::lang::String *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createXMLEventReader(::java::lang::String *, ::java::io::InputStream *) = 0;
  virtual ::javax::xml::stream::XMLStreamReader * createFilteredReader(::javax::xml::stream::XMLStreamReader *, ::javax::xml::stream::StreamFilter *) = 0;
  virtual ::javax::xml::stream::XMLEventReader * createFilteredReader(::javax::xml::stream::XMLEventReader *, ::javax::xml::stream::EventFilter *) = 0;
  virtual ::javax::xml::stream::XMLResolver * getXMLResolver() = 0;
  virtual void setXMLResolver(::javax::xml::stream::XMLResolver *) = 0;
  virtual ::javax::xml::stream::XMLReporter * getXMLReporter() = 0;
  virtual void setXMLReporter(::javax::xml::stream::XMLReporter *) = 0;
  virtual void setProperty(::java::lang::String *, ::java::lang::Object *) = 0;
  virtual ::java::lang::Object * getProperty(::java::lang::String *) = 0;
  virtual jboolean isPropertySupported(::java::lang::String *) = 0;
  virtual void setEventAllocator(::javax::xml::stream::util::XMLEventAllocator *) = 0;
  virtual ::javax::xml::stream::util::XMLEventAllocator * getEventAllocator() = 0;
  static ::java::lang::String * IS_NAMESPACE_AWARE;
  static ::java::lang::String * IS_VALIDATING;
  static ::java::lang::String * IS_COALESCING;
  static ::java::lang::String * IS_REPLACING_ENTITY_REFERENCES;
  static ::java::lang::String * IS_SUPPORTING_EXTERNAL_ENTITIES;
  static ::java::lang::String * SUPPORT_DTD;
  static ::java::lang::String * REPORTER;
  static ::java::lang::String * RESOLVER;
  static ::java::lang::String * ALLOCATOR;
  static ::java::lang::Class class$;
};

#endif // __javax_xml_stream_XMLInputFactory__
