code: public Throwable getCause() {
          try {
              if (!causeInitialized && ivCause != this) {
                  super.initCause(ivCause);
              }
          } catch (Throwable t) {
          } finally {
              causeInitialized = true;
          }
          return super.getCause();
      }
docs: Return the Throwable that is considered the root cause of this WsException.
  Null is returned if the root cause is nonexistent or unknown. The root
  cause is the throwable that caused this WsException to get thrown.
  <p>
  The Throwable that is returned is either the Throwable supplied via one of the appropriate constructors, or that set via the {@link #initCause(Throwable)} method. While it
  is
  typically unnecessary to override this method, a subclass can override it to return a cause set by some other means, such as a legacy exception chaining infrastructure.
  <p>
  
  @return the Throwable that is the cause of this WsException, or null if
  the cause is nonexistent or unknown.