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

#ifndef __gnu_xml_util_Resolver__
#define __gnu_xml_util_Resolver__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace util
      {
          class Resolver;
      }
    }
  }
  namespace org
  {
    namespace xml
    {
      namespace sax
      {
          class InputSource;
      }
    }
  }
}

class gnu::xml::util::Resolver : public ::java::lang::Object
{

public:
  static void addDirectoryMapping(::java::util::Dictionary *, JArray< JArray< ::java::lang::String * > * > *, ::java::io::File *);
  static ::java::lang::String * fileNameToURL(::java::lang::String *);
  static ::java::lang::String * fileToURL(::java::io::File *);
  static ::java::lang::String * getURL(::java::lang::String *);
  Resolver(::java::util::Dictionary *);
  static ::java::lang::String * getEncoding(::java::lang::String *);
  virtual ::org::xml::sax::InputSource * resolveEntity(::java::lang::String *, ::java::lang::String *);
private:
  ::java::util::Dictionary * __attribute__((aligned(__alignof__( ::java::lang::Object)))) pubidMapping;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_util_Resolver__
