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

#ifndef __gnu_xml_stream_XMLOutputFactoryImpl__
#define __gnu_xml_stream_XMLOutputFactoryImpl__

#pragma interface

#include <javax/xml/stream/XMLOutputFactory.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace stream
      {
          class XMLOutputFactoryImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace stream
      {
          class XMLEventWriter;
          class XMLStreamWriter;
      }
      namespace transform
      {
          class Result;
      }
    }
  }
}

class gnu::xml::stream::XMLOutputFactoryImpl : public ::javax::xml::stream::XMLOutputFactory
{

public:
  XMLOutputFactoryImpl();
  virtual ::javax::xml::stream::XMLStreamWriter * createXMLStreamWriter(::java::io::Writer *);
  virtual ::javax::xml::stream::XMLStreamWriter * createXMLStreamWriter(::java::io::OutputStream *);
  virtual ::javax::xml::stream::XMLStreamWriter * createXMLStreamWriter(::java::io::OutputStream *, ::java::lang::String *);
  virtual ::javax::xml::stream::XMLStreamWriter * createXMLStreamWriter(::javax::xml::transform::Result *);
  virtual ::javax::xml::stream::XMLEventWriter * createXMLEventWriter(::java::io::OutputStream *);
  virtual ::javax::xml::stream::XMLEventWriter * createXMLEventWriter(::java::io::OutputStream *, ::java::lang::String *);
  virtual ::javax::xml::stream::XMLEventWriter * createXMLEventWriter(::java::io::Writer *);
  virtual ::javax::xml::stream::XMLEventWriter * createXMLEventWriter(::javax::xml::transform::Result *);
  virtual void setProperty(::java::lang::String *, ::java::lang::Object *);
  virtual ::java::lang::Object * getProperty(::java::lang::String *);
  virtual jboolean isPropertySupported(::java::lang::String *);
  virtual jboolean isPrefixDefaulting();
  virtual void setPrefixDefaulting(jboolean);
public: // actually protected
  jboolean __attribute__((aligned(__alignof__( ::javax::xml::stream::XMLOutputFactory)))) prefixDefaulting;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_stream_XMLOutputFactoryImpl__
