I agree that this is where the mapping patterns are coming from. But doesn't this undermine the whole binding-independent programming model feature advertised by SCA?
Scott On Jan 28, 2008 11:51 AM, Raymond Feng <[EMAIL PROTECTED]> wrote: > Hi, Scott. > > I agree with you that the Fault<-->Exception mapping pattern should be > independent of the databinding for the fault data. Generally speaking, the > mapping patterns are defined by the Web Service stack, for example, JAXWS, > JAXRPC or Axis2. We probably we need to make the mapping handler extensible > and then binding/implementation providers can plug in their own patterns. > > Thanks, > Raymond > > ----- Original Message ----- > From: "Scott Kurz" <[EMAIL PROTECTED]> > To: <tuscany-dev@ws.apache.org> > > Sent: Thursday, January 24, 2008 3:01 PM > Subject: Re: Exception->Fault mapping > > > > Raymond, > > > > Thanks for organizing this discussion much better. Responses inline... > > > > > > On Jan 23, 2008 12:44 PM, Raymond Feng <[EMAIL PROTECTED]> wrote: > >> Hi, Scott. > >> > >> Thank you for bringing this issue up again for discussion. > >> > >> I think the topic is mostly about how to work with WSDL faults in Java. > >> If > >> we start with a WSDL port type, the WSDL2Java mapping will generate the > >> corresponding Java exceptions to represent the WSDL faults. If we start > >> with > >> a java interface, the Java2WSDL mapping will derive the fault definition > >> from the checked exception on the business methods. > >> > >> Let's look at various aspects in this area: > >> > >> 1) The model to represent the exception/fault metadata > >> > >> We have the following model today: > >> > >> DataType > >> physical ---- the exception class > >> logical --- DataType > >> physical --- the fault data class > >> logical --- the fault data logical type, for example, the XMLType > >> for the fault element > >> > >> I think it's OK. > > > > I think this could be OK, but let's also consider adding the > > exc->fault pattern to this model > > in some manner. More below... > > > > > >> 2) The Exception/Fault patterns (How does a java exception wrap/represent > >> a > >> fault) > >> > >> There are a few important fault patterns: > >> * JAX-WS section 2.5 pattern (i.e. getFaultInfo() returns wrappered fault > >> with specific constructors) > >> * JAXWS section 3.7. It derives a WSDL fault from the plain Java > >> exception > >> on the SEI. > >> * Axis2 pattern: It's similar to JAX-WS 2.5 pattern, but the method name > >> is > >> getFaultMessage() > >> * Plain Java Exception: The exception itself has properties corresponding > >> to > >> the fault data > >> * Other patterns such as JAX-RPC? > >> > >> The exception/fault pattern could be independent of the databinding of > >> the > >> fault data. For example, we could use the JAX-WS 2.5 pattern for fault > >> data > >> in SDO. We should replace the FAULT_ELEMENT with @WebFault. > >> > >> We can try to unify the fault wrapper exception pattern using JAX-WS. The > >> fault data can be represented using different databindings, such as SDO, > >> JAXB or POJO. > >> > >> When we introspect Java interfaces, we need to match the exceptions by > >> supported patterns and populate the DataType for the exceptions. > > > > So the introspection today is flawed in strictly tying the databinding > > of the fault to a single > > exception pattern. Someone might want to write an exception in the > > Axis2 pattern which wrappers > > an SDO. In today's framework you'd have to have an > > Axis2-pattern-SDO-fault exc handler. > > > > So I'm thinking we need to, for Java exceptions, figure out the > > exception->fault pattern > > first and then use that to figure out the type of the fault. Once > > we've figured that out the fault type we can simply > > do an introspectType(faultType, annotations) to figure out the > > databinding of the fault. > > > > The databinding of the fault is used to transform the fault from one > > databinding to another, however it > > should not be tied to the question of how to map between fault and > > exception. Since we already had > > to introspect to figure out that exc->fault pattern, let's save this > > information, i.e. save the fault pattern. > > > > It is that fault pattern then that should determine how to get from > > fault->exc and exc->fault. These functions > > are currently served by ExceptionHandler.createException() and > > ExceptionHandler.getFaultInfo(), respectively. > > Again, the ExceptionHandler is currently tied to a specific > > databinding when it should be tied to a fault pattern. > > > > Now.. you'll see in the patch I attached to TUSCANY-1206 a step > > towards implementing this. I'm not saying > > that the fields I added to DataType, 'exceptionHandler' and > > 'exceptionPhysical', represent the best solution. (In fact > > it's incomplete since I still have the ExceptionHandler tied to a DB). > > > > So if this is a good solution it should apply to WSDL intfs as well.. > > and I tried to take a step to integrate the WSDL > > introspector. I haven't looked at that code in awhile though so I'll > > leave it at that mention. > > > >> > >> 3) Service specific exception (user fault) vs. Protocol level exception > >> (system fault) > >> > >> There are two types of faults: > >> a) User fault: The service-specific fault decalred on the business > >> operation, for example, SymbolNotFound > >> b) System fault: The WS stack hits a system/procotol level problem > >> > >> Both faults could be seen in the SOAP messages, and we need to be able to > >> distinguish them. > >> > >> We use a FaultException to represent the fault data from different > >> bindings > >> as the uniform wrapper. Different stack may use different exceptions for > >> the > >> SOAP fault, for example, SOAPFaultException by JAXWS and AxisFault by > >> Axis2. > >> > >> 4) The algorithm to match the fault data back to the corresponding java > >> exception > >> > >> We also need to refine the algorithm to map a fault data back to a Java > >> exception declared on the business method. It can be based on the fault > >> QName. If there is no match, we should wrap the fault into a > >> ServiceRuntimeException. > > > > > >> Thanks, > >> Raymond > >> > >> > >> > >> ----- Original Message ----- > >> From: "Scott Kurz" <[EMAIL PROTECTED]> > >> To: <tuscany-dev@ws.apache.org> > >> Sent: Thursday, January 10, 2008 5:14 PM > >> Subject: Exception->Fault mapping > >> > >> > >> >A few months back, I wrote up a proposal for "decoupling the fault > >> > databinding from the way that the exception maps to a fault" > >> > which would among other things "get the exception handlers out of the > >> > introspection business." > >> > > >> > The mail is here: > >> > http://www.mail-archive.com/tuscany-dev@ws.apache.org/msg24973.html > >> > and I attached a patch to: > >> > https://issues.apache.org/jira/browse/TUSCANY-1206 > >> > > >> > Can we re-open this discussion? I know I may have missed some of > >> > the discussion in the meantime; I apologize and if so maybe someone > >> > wouldn't mind pointing me to that. > >> > > >> > Anyway at the time Raymond said it sounded like a good idea, but I > >> > don't think anything came of it. > >> > > >> > I know there's been some related work, e.g. Simon Nash's work on > >> > TUSCANY-1939, but to me it seems the issues I encountered still exist. > >> > > >> > This isn't just a question of elegance. One problem with using the > >> > ExceptionHandler.getFaultType() as an introspector can be seen by > >> > considering: > >> > > >> > public class MyExcMsg extends Exception { > >> > private int fault; > >> > public static QName FAULT_ELEMENT = new > >> > QName("http://blah","MyFault"); > >> > > >> > // The rest follows the JAX-WS Sec 2.5 pattern, > >> > > >> > So with the current code, the SDOExceptionHandler will say, "yes, I > >> > recognize this" and we'll set up SDO as the DB for the fault. But > >> > the DB should be "simple". > >> > > >> > And the bigger point I'm making is: the question of SDO, JAXB, or > >> > simple should be a question of what the fault looks like, not the > >> > pattern by which the exception > >> > maps to a fault. > >> > > >> > Scott > >> > > >> > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: [EMAIL PROTECTED] > >> > For additional commands, e-mail: [EMAIL PROTECTED] > >> > > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]