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

#ifndef __javax_xml_xpath_XPathFactory__
#define __javax_xml_xpath_XPathFactory__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace javax
  {
    namespace xml
    {
      namespace xpath
      {
          class XPath;
          class XPathFactory;
          class XPathFunctionResolver;
          class XPathVariableResolver;
      }
    }
  }
}

class javax::xml::xpath::XPathFactory : public ::java::lang::Object
{

public: // actually protected
  XPathFactory();
public:
  static ::javax::xml::xpath::XPathFactory * newInstance();
  static ::javax::xml::xpath::XPathFactory * newInstance(::java::lang::String *);
private:
  static ::java::lang::String * getFactoryClassName(::java::lang::ClassLoader *, jint);
public:
  virtual jboolean isObjectModelSupported(::java::lang::String *) = 0;
  virtual void setFeature(::java::lang::String *, jboolean) = 0;
  virtual jboolean getFeature(::java::lang::String *) = 0;
  virtual void setXPathVariableResolver(::javax::xml::xpath::XPathVariableResolver *) = 0;
  virtual void setXPathFunctionResolver(::javax::xml::xpath::XPathFunctionResolver *) = 0;
  virtual ::javax::xml::xpath::XPath * newXPath() = 0;
  static ::java::lang::String * DEFAULT_PROPERTY_NAME;
  static ::java::lang::String * DEFAULT_OBJECT_MODEL_URI;
  static ::java::lang::Class class$;
};

#endif // __javax_xml_xpath_XPathFactory__
