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

#ifndef __gnu_xml_dom_DomDOMException__
#define __gnu_xml_dom_DomDOMException__

#pragma interface

#include <org/w3c/dom/DOMException.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
          class DomDOMException;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::dom::DomDOMException : public ::org::w3c::dom::DOMException
{

public:
  DomDOMException(jshort);
  DomDOMException(jshort, ::java::lang::String *, ::org::w3c::dom::Node *, jint);
  virtual ::org::w3c::dom::Node * getNode();
  virtual ::java::lang::String * getData();
  virtual jint getValue();
  virtual ::java::lang::String * getMessage();
private:
  static ::java::lang::String * diagnostic(jshort);
  ::java::lang::String * __attribute__((aligned(__alignof__( ::org::w3c::dom::DOMException)))) data;
  ::org::w3c::dom::Node * node;
  jint value;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_DomDOMException__
