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

#ifndef __javax_management_MBeanServerInvocationHandler__
#define __javax_management_MBeanServerInvocationHandler__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace management
    {
        class MBeanServerConnection;
        class MBeanServerInvocationHandler;
        class ObjectName;
    }
  }
}

class javax::management::MBeanServerInvocationHandler : public ::java::lang::Object
{

public:
  MBeanServerInvocationHandler(::javax::management::MBeanServerConnection *, ::javax::management::ObjectName *);
  MBeanServerInvocationHandler(::javax::management::MBeanServerConnection *, ::javax::management::ObjectName *, jboolean);
  virtual ::javax::management::MBeanServerConnection * getMBeanServerConnection();
  virtual ::javax::management::ObjectName * getObjectName();
  virtual ::java::lang::Object * invoke(::java::lang::Object *, ::java::lang::reflect::Method *, JArray< ::java::lang::Object * > *);
  virtual jboolean isMXBean();
  static ::java::lang::Object * newProxyInstance(::javax::management::MBeanServerConnection *, ::javax::management::ObjectName *, ::java::lang::Class *, jboolean);
private:
  jboolean inInterface(::java::lang::String *, ::java::lang::Class *, JArray< ::java::lang::Class * > *);
  ::javax::management::MBeanServerConnection * __attribute__((aligned(__alignof__( ::java::lang::Object)))) conn;
  ::javax::management::ObjectName * name;
  jboolean mxBean;
  ::java::lang::Class * iface;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_MBeanServerInvocationHandler__
