public void printStackTrace(PrintWriter pw) {
    pw.println(this);

    for (int i = 0; i < this.propertyAccessExceptions.length; ++i) {
      PropertyAccessException pae = this.propertyAccessExceptions[i];
      pae.printStackTrace(pw);
    }
  }
 /** Return the exception for this field, or <code>null</code> if there isn't one. */
 public PropertyAccessException getPropertyAccessException(String propertyName) {
   for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
     PropertyAccessException pae = this.propertyAccessExceptions[i];
     if (propertyName.equals(pae.getPropertyChangeEvent().getPropertyName())) {
       return pae;
     }
   }
   return null;
 }
 public boolean contains(Class exType) {
   if (exType == null) {
     return false;
   }
   if (exType.isInstance(this)) {
     return true;
   }
   for (int i = 0; i < this.propertyAccessExceptions.length; i++) {
     PropertyAccessException pae = this.propertyAccessExceptions[i];
     if (pae.contains(exType)) {
       return true;
     }
   }
   return false;
 }
  public String getMessage() {
    StringBuffer sb = new StringBuffer();
    sb.append(this.toString());
    sb.append("; nested propertyAccessExceptions are: ");

    for (int i = 0; i < this.propertyAccessExceptions.length; ++i) {
      PropertyAccessException pae = this.propertyAccessExceptions[i];
      sb.append("[");
      sb.append(pae.getClass().getName());
      sb.append(": ");
      sb.append(pae.getMessage());
      sb.append(']');
      if (i < this.propertyAccessExceptions.length - 1) {
        sb.append(", ");
      }
    }

    return sb.toString();
  }