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

#ifndef __javax_naming_event_NamingExceptionEvent__
#define __javax_naming_event_NamingExceptionEvent__

#pragma interface

#include <java/util/EventObject.h>
extern "Java"
{
  namespace javax
  {
    namespace naming
    {
        class NamingException;
      namespace event
      {
          class EventContext;
          class NamingExceptionEvent;
          class NamingListener;
      }
    }
  }
}

class javax::naming::event::NamingExceptionEvent : public ::java::util::EventObject
{

public:
  NamingExceptionEvent(::javax::naming::event::EventContext *, ::javax::naming::NamingException *);
  virtual ::javax::naming::NamingException * getException();
  virtual ::javax::naming::event::EventContext * getEventContext();
  virtual void dispatch(::javax::naming::event::NamingListener *);
private:
  static const jlong serialVersionUID = -4877678086134736336LL;
  ::javax::naming::NamingException * __attribute__((aligned(__alignof__( ::java::util::EventObject)))) exception;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_naming_event_NamingExceptionEvent__
