
Hi all, Just wanted to start some discussion on how to render faults for BES. The first thing to state is that I'm assuming the use of SOAP 1.1 for messaging, as this is the version referenced in the WS-I BP version 1.1. Please correct me if I'm wrong.... The second is that for now I'm ignoring WS-BaseFaults, as I think it would be very difficult to reach consensus on it's use in a short amount of time. The BES specification defines a few faults: (contained in SOAP Fault element in response) - NotAcceptingNewActivities - UnsupportedJSDLVersionFault - UnsupportedFeatureFault (contained in a response body) - ActivityDoesNotExistFault - CantApplyOperationToCurrentState <-- implied in doc as a todo We can render these in one of two ways: 1. We define new faultcode elements for these faults, and the detail can provide a higher level of information if needed. I'm not clear on how easy this is for most people from the tooling point of view. It would also require the WSDL to reflect the new fault codes (is this true?). 2. We define a set of fault elements that can either be used in the detail element, or on their own in some response elements. These fault elements wouldn't be "anyType", but would just be empty complexTypes. I prefer number 2 as this is quite straightforward from a tooling support point of view. Here are some examples of the various fault messages. Actual SOAP faults: <soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"> <faultcode>soap:Server</faultcode> <faultstring>This BES is not accepting new activites now</faultstring> <detail> <bes:NotAcceptingNewActivities xmlns:bes="..."/> </detail> </soap:Fault> <soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"> <faultcode>soap:Client</faultcode> <faultstring>Sorry ... I don't get it</faultstring> <detail> <bes:UnsupportedFeatureFault xmlns:bes="..."> <bes:UnsupportedElement name="jsdl-posix:POSIXApplication"/> </bes:UnsupportedFeatureFault> </detail> </soap:Fault> Faults in responses would be done using a type like: <xsd:complexType name="TerminateActivityResponseType"> <xsd:sequence> <xsd:element ref="bes-factory:ActivityIdentifier"/> <xsd:element name="Cancelled" type="xsd:boolean"/> <xsd:element ref="soap:Fault" minOccurs="0"/> <-- SOAP 1.1 fault </xsd:sequence> </xsd:complexType> So you'd get: <bes:TerminateActivityResponse xmlns:bes="..."> <bes:ActivityIdentifier>EPR</bes:ActivityIdentifier> <bes:Cancelled>false</bes:Cancelled> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>That activity doesn't exist</faultstring> <detail><bes:ActivityDoesNotExistFault/></detail> </soap:Fault> </bes:TerminateActivityResponse> <bes:TerminateActivityResponse xmlns:bes="..."> <bes:ActivityIdentifier>EPR</bes:ActivityIdentifier> <bes:Cancelled>false</bes:Cancelled> <soap:Fault> <faultcode>soap:Client</faultcode> <faultstring>That activity doesn't exist</faultstring> <detail><bes:CantApplyOperationToCurrentState/></detail> </soap:Fault> </bes:TerminateActivityResponse> Comments? -- Chris