There are basically three things that could go wrong:

1. Something at the transport level fails (UPS is not reachable)
2. The XML document is not valid (UPS messed up).
3. The XML document is valid, but it indicates that the request was invalid (bad user data).

In all three cases that I foresee, I don't think there is any opportunity to recover without further input from a person.  I'm sure I've overlooked other cases too.  With that in mind, does it make sense to wrap whatever it is that goes awry in an `ActiveMerchant::Shipping::ResponseError` instead?  Right now, just doing a raise `raise "Could not obtain shipping label. #{e.message}."` is not specific at all.