You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Thierry RAMANAMPANOHARANA (JIRA)" <ji...@apache.org> on 2015/12/01 15:47:11 UTC

[jira] [Commented] (CXF-5738) given soap action does not match any operation

    [ https://issues.apache.org/jira/browse/CXF-5738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15033791#comment-15033791 ] 

Thierry RAMANAMPANOHARANA commented on CXF-5738:
------------------------------------------------

The difference between CXF 2.6 and CXF 2.7 regarding the operation look-up is that when the SOAPAction is provided but no operations are bound to the given action name then in 2.7 a fault is thrown:
{code:java}
public static class SoapActionInAttemptTwoInterceptor extends AbstractSoapInterceptor {
        public SoapActionInAttemptTwoInterceptor() {
            super(Phase.PRE_LOGICAL);
        }
        public void handleMessage(SoapMessage message) throws Fault {
            BindingOperationInfo boi = message.getExchange().getBindingOperationInfo();
            if (boi == null) {
                return;
            }
            String action = getSoapAction(message);
            if (StringUtils.isEmpty(action)) {
                return;
            }
            SoapOperationInfo soi = boi.getExtensor(SoapOperationInfo.class);
            if (soi == null || action.equals(soi.getAction())) {
                return;
            }

            Object o = boi.getOperationInfo().getInput().getExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME);
            if (o == null) {
                o = boi.getOperationInfo().getInput().getExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME);
            }
            if (o != null && action.equals(o.toString())) {
                return;
            }
            
            throw new Fault("SOAP_ACTION_MISMATCH", LOG, null, action);
        }
    }
{code}

The work-around consisting of removing the SOAPAction from the message works indeed but the cause of the seems to be the fact that CXF does not implement the [Default Action pattern|http://www.w3.org/TR/ws-addr-wsdl/#defactionwsdl11] described by WSDL.

In 2.7, the correct approach was taken so that a fault is thrown when no operations are found. It is just that CXF forgot to associate the default action pattern to the operation.

> given soap action does not match any operation
> ----------------------------------------------
>
>                 Key: CXF-5738
>                 URL: https://issues.apache.org/jira/browse/CXF-5738
>             Project: CXF
>          Issue Type: Bug
>          Components: Soap Binding
>    Affects Versions: 2.7.11
>            Reporter: Nicola
>
> I'm generating a service from an existing wsdl (http://195.250.34.59/temp/original.wsdl), after creating the service the cxf generated wsdl has some small difference from the original one (http://195.250.34.59/temp/cxf_generated.wsdl), if I create client methods, using for example soapui, from the cxf generated wsdl all is fine but if I use the original wsdl the requests fail with the error:
> "the given soapaction does not match an operation"
> the problem is the SOAPAction http header:
> cxf expects no SOAPAction header or an empty one, if you look at the wsdl generated by cxf you can see a section not present in the original wsdl that define an empty soap action:
> <soap:operation soapAction="" style="document"/>
> after this section there is also the original one that define:
> <soap:operation soapAction="http://test.example.com//updateList"/>
> I defined an interceptor that remove the SOAPAction http header if present and this workaround the problem
> cxf should not modify the original wsdl or however should accept calls generated using the provided wsdl



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)