code: public synchronized Throwable initCause(Throwable cause) {
          if (this.cause != null) {
              throw new IllegalStateException("Can't override cause");
          }
          if (cause == this) {
              throw new IllegalArgumentException("Self-causation not permitted");
          }
          this.cause = cause;
  
          return this;
      }
docs: Initializes the <code>cause</code> field of this <code>SOAPException</code>
  object with the given <code>Throwable</code> object.
  <P>
  This method can be called at most once.  It is generally called from
  within the constructor or immediately after the constructor has
  returned a new <code>SOAPException</code> object.
  If this <code>SOAPException</code> object was created with the
  constructor {@link #SOAPException(Throwable)} or
  {@link #SOAPException(String,Throwable)}, meaning that its
  <code>cause</code> field already has a value, this method cannot be
  called even once.
  
  @param  cause the <code>Throwable</code> object that caused this
  <code>SOAPException</code> object to be thrown.  The value of this
  parameter is saved for later retrieval by the
  {@link #getCause()} method.  A <tt>null</tt> value is
  permitted and indicates that the cause is nonexistent or
  unknown.
  @return  a reference to this <code>SOAPException</code> instance
  @throws IllegalArgumentException if <code>cause</code> is this
  <code>Throwable</code> object.  (A <code>Throwable</code> object
  cannot be its own cause.)
  @throws IllegalStateException if the cause for this <code>SOAPException</code> object
  has already been initialized