I made a mistake when asking this question by thinking that the value of the member variable cause would be returned as the result of a call to getCause() in org.apache.catalina.connector.ClientAbortException. That obviously isn't the case. The real cause is returned.
Looking at the source of Throwable I can see that it sets cause = this to indicate that the cause has yet to be set. This was a bad question but I did learn something from asking it.
Original question below:
Sometimes when you catch exceptions, the getCause() will return the exception object itself, making it recursive. Why doesn't getCause() return null?