title: What is the "Best Practice" for SOAP servers to implement error notification?
body: <p>I am developing some SOAP web services using Ruby on Rails and considering how to handle generic failures. These generic errors are applicable to all the methods within the service and include the following :-</p>
  
  <ul>
  <li>Missing Request element</li>
  <li>Missing Authentication element (Custom)</li>
  <li>Invalid Authentication details</li>
  </ul>
  
  <p>I can intercept these errors within my controller before calling the relevant method and respond appropriately. My question is which implementation is easiest to manage from a Client perspective. My options for handling these errors seem to be as follows.</p>
  
  <ol>
  <li>Raise an exception and let the SOAP service generate a SoapFault. This would be fine except I have little (no) control over the structure of the message contained within the SOAP fault.</li>
  <li>Return an Http 400 response with an agreed data structure to indicate the error message. This structure would not be defined within the WSDL though.</li>
  <li>Include a Status element in all responses, whether successful or not and have that status element include a code and an array of error data (Including error messages). </li>
  </ol>
  
  <p>Option three seems like the best solution but is also the most error prone to implement as the implementation of web services in ROR precludes me from implementing this in a generic way and each method becomes responsible for checking the result of the checks and rendering an appropriate response. Admittedly this would be a single function call and return on failure but it is relying on the developer to remember to do this as we add more options.</p>
  
  <p>I appreciate that most ROR developers will say that this should be implemented as a REST service and I agree, in fact we already have REST services to do this but the spread of SOAP in the corporate world, and its impressive tooling support means that we have to provide SOAP services to remain competitive.</p>
  
  <p>In your experience what would be the easiest implementation for clients to handle and does this differ dependant upon the libraries/language of the client process.</p>