Author: ashakirin
Date: Fri Nov 22 16:54:11 2013
New Revision: 1544605
URL: http://svn.apache.org/r1544605
Log:
[CXF-5387] Added property to relax validation of SOAP Action in case if it not
specified in WSDL/service model
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java?rev=1544605&r1=1544604&r2=1544605&view=diff
==============================================================================
---
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
(original)
+++
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
Fri Nov 22 16:54:11 2013
@@ -36,6 +36,7 @@ import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.OperationInfo;
@@ -44,6 +45,7 @@ import org.apache.cxf.ws.addressing.JAXW
public class SoapActionInInterceptor extends AbstractSoapInterceptor {
private static final Logger LOG =
LogUtils.getL7dLogger(SoapActionInInterceptor.class);
+ private static final String ALLOW_NON_MATCHING_TO_DEFAULT =
"allowNonMatchingToDefaultSoapAction";
public SoapActionInInterceptor() {
super(Phase.READ);
@@ -124,8 +126,7 @@ public class SoapActionInInterceptor ext
.getBinding().getOperations();
if (bops != null) {
for (BindingOperationInfo boi : bops) {
- SoapOperationInfo soi =
boi.getExtensor(SoapOperationInfo.class);
- if (soi != null && action.equals(soi.getAction())) {
+ if (isActionMatch(message, boi, action)) {
if (bindingOp != null) {
//more than one op with the same action, will need to
parse normally
return;
@@ -172,8 +173,7 @@ public class SoapActionInInterceptor ext
if (StringUtils.isEmpty(action)) {
return;
}
- SoapOperationInfo soi = boi.getExtensor(SoapOperationInfo.class);
- if (soi == null || action.equals(soi.getAction())) {
+ if (isActionMatch(message, boi, action)) {
return;
}
@@ -189,5 +189,13 @@ public class SoapActionInInterceptor ext
}
}
+ private static boolean isActionMatch(SoapMessage message,
BindingOperationInfo boi, String action) {
+ SoapOperationInfo soi = boi.getExtensor(SoapOperationInfo.class);
+ boolean allowNoMatchingToDefault =
MessageUtils.getContextualBoolean(message,
+
ALLOW_NON_MATCHING_TO_DEFAULT,
+ false);
+ return ((soi != null) && action.equals(soi.getAction()))
+ || ((soi != null) && allowNoMatchingToDefault &&
StringUtils.isEmpty(soi.getAction()));
+ }
}