[ 
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)

Reply via email to