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

#ifndef __java_security_cert_CertPathBuilderException__
#define __java_security_cert_CertPathBuilderException__

#pragma interface

#include <java/security/GeneralSecurityException.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
      namespace cert
      {
          class CertPathBuilderException;
      }
    }
  }
}

class java::security::cert::CertPathBuilderException : public ::java::security::GeneralSecurityException
{

public:
  CertPathBuilderException();
  CertPathBuilderException(::java::lang::String *);
  CertPathBuilderException(::java::lang::Throwable *);
  CertPathBuilderException(::java::lang::String *, ::java::lang::Throwable *);
  virtual ::java::lang::String * getMessage();
  virtual ::java::lang::Throwable * getCause();
  virtual ::java::lang::String * toString();
  virtual void printStackTrace();
  virtual void printStackTrace(::java::io::PrintStream *);
  virtual void printStackTrace(::java::io::PrintWriter *);
private:
  static const jlong serialVersionUID = 5316471420178794402LL;
public:
  static ::java::lang::Class class$;
};

#endif // __java_security_cert_CertPathBuilderException__
