[ https://issues.apache.org/jira/browse/AXIS2-4077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Brian DePradine updated AXIS2-4077: ----------------------------------- Component/s: (was: kernel) Addressing > Wrong wsa:Action returned in fault message when an operation declares > multiple faults > ------------------------------------------------------------------------------------- > > Key: AXIS2-4077 > URL: https://issues.apache.org/jira/browse/AXIS2-4077 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Components: Addressing > Affects Versions: 1.4.1 > Reporter: Thomas Hecker > > I just noticed that throwing a fault causes Axis to include the wrong > wsa:Action (and also the soap action http header) in the SOAP response when > the following conditions apply: > - Addressing module is engaged > - There are multiple faults declared for the service operation that was > invoked > - The AxisFault that is passed by the generated MessageReceiver does not have > a fault action set > When these conditions apply, the wsa:Action header may have the value of a > different fault than the one in the fault detail element. > The problem appears to be in MessageContextBuild.java (line 285): > String faultAction = (e instanceof AxisFault) ? > ((AxisFault)e).getFaultAction() : null; > if (faultAction == null) { > AxisOperation op = processingContext.getAxisOperation(); > if (op != null && op.getFaultAction() != null) { > // TODO: Should the op be able to pick a fault action based > on the fault? > faultAction = op.getFaultAction(); > } else { //If, for some reason there is no value set, should use > a sensible action. > faultAction = Final.WSA_SOAP_FAULT_ACTION; > } > } > The op.getFaultAction() will simply return the action of the first fault > among those declared for the operation. I suggest you change the code to: > String faultAction = (e instanceof AxisFault) ? > ((AxisFault)e).getFaultAction() : null; > if (faultAction == null) { > AxisOperation op = processingContext.getAxisOperation(); > if (op != null && > op.getFaultAction((String)processingContext.getProperty(org.apache.axis2.Constants.FAULT_NAME)) > != null) { > faultAction = > op.getFaultAction((String)processingContext.getProperty(org.apache.axis2.Constants.FAULT_NAME)); > } else { //If, for some reason there is no value set, should use > a sensible action. > faultAction = Final.WSA_SOAP_FAULT_ACTION; > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.