[ 
https://issues.apache.org/jira/browse/AXIS2-5836?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen updated AXIS2-5836:
-----------------------------------
    Fix Version/s:     (was: 1.7.5)

> AxisFault class (used by MessageContextBuilder to create SOAPFault) not SOAP 
> version-independent?
> -------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-5836
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5836
>             Project: Axis2
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 1.7.4
>            Reporter: Jeff Thomas
>
> Not sure if this is a "bug" or if our implementation approach was incorrect.
> ----
> The AxisFault class (I assume) was originally constructed as a SOAP 
> version-independent container for fault-information.  
> The MessageContextBuilder, based upon the MessageContext should use the 
> correct SOAPFactory implementation (1.1 or 1.2) to assemble the SOAPFault 
> body from the generic fault-information.
> The SOAP 1.1 Standard says that SOAPFaults may have a user-defined primary 
> fault-code and contains no sub-codes.
> The SOAP 1.2 Standard says that SOAPFaults may only have one of 5 pre-defined 
> primary fault-codes and that the application-specific fault-codes are to be 
> assigned as sub-codes.
> The problem is, for this code to work correctly today I must know which SOAP 
> Version I am targeting when I set the fault-code (and optionally sub-codes) 
> on the new AxisFault object.   As such the AxisFault class is no longer truly 
> SOAP version-independent.
> {code}
> // SOAP 1.1
> AxisFault axisFault = new AxisFault(APPL_QNAME, "reason", ex);
> // SOAP 1.2
> AxisFault axisFault = new AxisFault(SOAP12Constants.QNAME_RECEIVER_FAULTCODE, 
> "reason", ex);
> axisFault.setFaultSubCodes(Arrays.asList(APPL_QNAME);
> {code}
> If all of our exception-classes extend AxisFault and we don't have the 
> MessageContext available at the point at which we throw the exception, then 
> we are not in a position to decide whether or not the current operation is 
> SOAP 1.1 or 1.2.
> We currently have a "workaround" (hack?") which always sets the fault-code of 
> our exceptions to QNAME_RECEIVER_FAULTCODE and in the MessageContextBuilder a 
> custom patch that assumes that if the operation context is SOAP 1.1 and 
> subcodes are set on the AxisFault, that the first subcode is the real 
> application fault-code and all others subcodes are discarded.  However, I am 
> pretty sure this is not the correct approach.
> My feeling is that the AxisFault class is no longer as version-independent as 
> it needs to be with the introduction of SOAP 1.2 special-handling.  However, 
> looking at the code, I am not sure if it even possible to generically achieve 
> this.
> Alternatively I am not sure if the decision to extend AxisFault for our 
> custom exceptions was the correct choice or if we should have rather caught 
> our custom exceptions in the service-call (where we have the MessageContext) 
> and then build the appropriate generic AxisFault based on whether or not the 
> call is for SOAP 1.1 or 1.2.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to