Refactored many of the Connection classes, to break out functionality into seperate methods, instead of one large method.
This improves readability, and makes the code more testable.
Changed ExchangeSessionFactory to longer be accessed via Static methods. This will allow for ExchangeSessionFactory to be subclassed to provide different behaviours.
Minor nit, no need to use indexOf() >= 0 , when really we are testing if contains(..)
Extracted an inner class.
Removed a couple of unneeded null checks.
Made some classes implement Serialisable, since they are used within a Serialisable class.
Refactored ExchangeSession.setAuthFormFields() to accept a PostMethod instead of a HttpMethod, as previously it assumed it was a PostMethod and cast multiple times. Now no need to cast, and it's more explicit.
Refactored multiple files, by splitting out the inner classes.
Added new ExchangeVersion object, to ensure a normalised naming of versions, and added some helper methods to ensure specific versions are correctly matched.
Added some missing things from the Maven build, to allow mvn to build the project.
Removed some @author bramp comments, that my IDE placed on code that wasn't mine.