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

#ifndef __javax_naming_LinkException__
#define __javax_naming_LinkException__

#pragma interface

#include <javax/naming/NamingException.h>
extern "Java"
{
  namespace javax
  {
    namespace naming
    {
        class LinkException;
        class Name;
    }
  }
}

class javax::naming::LinkException : public ::javax::naming::NamingException
{

public:
  LinkException();
  LinkException(::java::lang::String *);
  virtual ::javax::naming::Name * getLinkResolvedName();
  virtual ::javax::naming::Name * getLinkRemainingName();
  virtual ::java::lang::Object * getLinkResolvedObj();
  virtual ::java::lang::String * getLinkExplanation();
  virtual void setLinkExplanation(::java::lang::String *);
  virtual void setLinkResolvedName(::javax::naming::Name *);
  virtual void setLinkRemainingName(::javax::naming::Name *);
  virtual void setLinkResolvedObj(::java::lang::Object *);
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toString(jboolean);
private:
  static const jlong serialVersionUID = -7967662604076777712LL;
public: // actually protected
  ::javax::naming::Name * __attribute__((aligned(__alignof__( ::javax::naming::NamingException)))) linkResolvedName;
  ::java::lang::Object * linkResolvedObj;
  ::javax::naming::Name * linkRemainingName;
  ::java::lang::String * linkExplanation;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_naming_LinkException__
