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)