SOAPAction based routing does not route correctly based on wsdl:binding/wsdl:operation/soap:operation soapAction ----------------------------------------------------------------------------------------------------------------
Key: AXIS2-1969 URL: https://issues.apache.org/jira/browse/AXIS2-1969 Project: Apache Axis 2.0 (Axis2) Issue Type: Bug Reporter: Jeff Barrett The Axis2 engine is not correctly handling a SOAPAction wsdl extensibility element (details below). The only SOAPAction routing that will work is if the SOAPAction is coincidently the same as the operation name. DETAILS ======= The problem in in WSDL11ToAxisServiceBuilder. The basic flow is populateService processBinding processPortType populateOperations WSDL11ActionHelper for Input WSDL11ActionHelper for Output WSDL11ActionHalper for Fault return AxisService addOperation // NOTE that at this point the SOAPAction has NOT been // on the operation! The SOAPAction is specified in the wsdl:binding // and that has not been processed yet. So, this returns null or an empty string soapAction = axisOperation.getSoapAction if (soapAction not empty) // As noted above, this isn't called because soapAction is empty mapActionToOperation(soapAction, operation) return // NOW we get the wsdl bindings and process them, so this is the point we will encounter the // SOAP Action in the WSDL binding for each operation in the binding copyExtensibleElements(wsdl4jBindingOperation.getExtensibilityElements(), dif, operation, BINDING_OPERATION); // At this point, for a wsdl4jElement instanceof SOAP12Operation or wsdl4jElement instanceof SOAPOperation // we will set the SOAP action on the operation if(isTraceEnabled){ log.trace("copyExtensibleElements:: setSoapAction "+soapOperation.getSoapActionURI()); } axisOperation.setSoapAction(soapOperation.getSoapActionURI()); The problem with the above is that SOAP action from the WSDL binding is never added to the AxisService.operationsAliasesMap which is done by calling mapActionToOperation. Note that I've only looked at WSDL11ToAxisServiceBuilder, but I suspect the same problem existsin WSDL20ToAxisServiceBuilder. The net effect of all the above is that SOAPActionBasedDispatcher will only find an operation if the SOAPAction from the message happens to be the same as the AxisOperation name. So given the following WSDL snippet: <wsdl:binding name="BGCKBinding" type="tns:BGCKIntf"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="submitBGCK"> <soap:operation soapAction="http://ibm.com/bgck/submitBGCK"/> The operation "submitBGCK" would not be found given a SOAPAction of "http://ibm.com/bgck/submitBGCK". Note that even though soap:operation soapAction is never used correctly, an error does not always occur. In some cases (wrapped), the correct operation (or at least an operation) can be determined by the SOAPMessageBodyBasedDispatcher. However, this will only "work" if WS-Addressing headers are not present. If they are present, then WS-A will throw an exception because the AxisOperation was not found: org.apache.axis2.AxisFault: The [action] cannot be processed at the receiver. at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingFault(AddressingFaultsHelper.java:156) at org.apache.axis2.addressing.AddressingFaultsHelper.triggerActionNotSupportedFault(AddressingFaultsHelper.java:131) at org.apache.axis2.handlers.addressing.AddressingWSDLValidationHandler.checkAction(AddressingWSDLValidationHandler.java:113) at org.apache.axis2.handlers.addressing.AddressingWSDLValidationHandler.invoke(AddressingWSDLValidationHandler.java:39) at org.apache.axis2.engine.Phase.invoke(Phase.java:382) at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:247) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:164) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:337) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]