Author: dkulp
Date: Fri Apr 6 15:08:43 2012
New Revision: 1310385
URL: http://svn.apache.org/viewvc?rev=1310385&view=rev
Log:
Merged revisions 1310362 via git cherry-pick from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1310362 | dkulp | 2012-04-06 10:47:07 -0400 (Fri, 06 Apr 2012) | 3 lines
[CXF-4223] Extend fault policy interceptors with POLICY_OVERRIDE
Patch from Andrei Shakirin applied
........
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInInterceptor.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyOutInterceptor.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ClientPolicyInFaultInterceptor.java
Fri Apr 6 15:08:43 2012
@@ -19,6 +19,7 @@
package org.apache.cxf.ws.policy;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -35,6 +36,7 @@ import org.apache.cxf.phase.Phase;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.Conduit;
import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
/**
*
@@ -72,27 +74,44 @@ public class ClientPolicyInFaultIntercep
Conduit conduit = exchange.getConduit(msg);
LOG.fine("conduit: " + conduit);
-
- // We do not know the underlying message type yet - so we
pre-emptively add interceptors
- // that can deal with all faults returned to this client endpoint.
-
- EndpointPolicy ep = pe.getClientEndpointPolicy(ei, conduit);
- LOG.fine("ep: " + ep);
-
- List<Interceptor<? extends Message>> faultInterceptors =
ep.getFaultInterceptors();
-
- LOG.fine("faultInterceptors: " + faultInterceptors);
- if (null != faultInterceptors) {
- for (Interceptor<? extends Message> i : faultInterceptors) {
- msg.getInterceptorChain().add(i);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
+
+ List<Interceptor<? extends Message>> faultInterceptors =
+ new ArrayList<Interceptor<? extends Message>>();
+ Collection<Assertion> assertions = new ArrayList<Assertion>();
+
+ // 1. Check overridden policy
+ Policy p =
(Policy)msg.getContextualProperty(PolicyConstants.POLICY_OVERRIDE);
+ if (p != null) {
+ EndpointPolicyImpl endpi = new EndpointPolicyImpl(p);
+ EffectivePolicyImpl effectivePolicy = new EffectivePolicyImpl();
+ effectivePolicy.initialise(endpi, (PolicyEngineImpl)pe, true,
true);
+ PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
",
+ effectivePolicy.getPolicy());
+
+ faultInterceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
+ } else {
+ // 2. Process endpoint policy
+ // We do not know the underlying message type yet - so we
pre-emptively add interceptors
+ // that can deal with all faults returned to this client endpoint.
+
+ EndpointPolicy ep = pe.getClientEndpointPolicy(ei, conduit);
+ LOG.fine("ep: " + ep);
+ if (ep != null) {
+ faultInterceptors.addAll(ep.getFaultInterceptors());
+ assertions.addAll(ep.getFaultVocabulary());
}
}
- // insert assertions of endpoint's fault vocabulary into message
+ // add interceptors into message chain
+ LOG.fine("faultInterceptors: " + faultInterceptors);
+ for (Interceptor<? extends Message> i : faultInterceptors) {
+ msg.getInterceptorChain().add(i);
+ LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
+ }
- Collection<Assertion> assertions = ep.getFaultVocabulary();
- if (null != assertions && !assertions.isEmpty()) {
+ // insert assertions of endpoint's fault vocabulary into message
+ if (!assertions.isEmpty()) {
msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
}
}
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/EffectivePolicyImpl.java
Fri Apr 6 15:08:43 2012
@@ -70,12 +70,16 @@ public class EffectivePolicyImpl impleme
}
public void initialise(EndpointPolicyImpl epi, PolicyEngineImpl engine,
boolean inbound) {
+ initialise(epi, engine, inbound, false);
+ }
+
+ public void initialise(EndpointPolicyImpl epi, PolicyEngineImpl engine,
boolean inbound, boolean fault) {
policy = epi.getPolicy();
chosenAlternative = epi.getChosenAlternative();
if (chosenAlternative == null) {
chooseAlternative(engine, null);
}
- initialiseInterceptors(engine, inbound);
+ initialiseInterceptors(engine, inbound, fault);
}
public void initialise(EndpointInfo ei,
@@ -177,14 +181,19 @@ public class EffectivePolicyImpl impleme
void initialiseInterceptors(PolicyEngineImpl engine) {
initialiseInterceptors(engine, false);
}
+
void initialiseInterceptors(PolicyEngineImpl engine, boolean useIn) {
+ initialiseInterceptors(engine, useIn, false);
+ }
+
+ void initialiseInterceptors(PolicyEngineImpl engine, boolean useIn,
boolean fault) {
if (engine.getBus() != null) {
PolicyInterceptorProviderRegistry reg
=
engine.getBus().getExtension(PolicyInterceptorProviderRegistry.class);
Set<Interceptor<? extends org.apache.cxf.message.Message>> out
= new LinkedHashSet<Interceptor<? extends
org.apache.cxf.message.Message>>();
for (Assertion a : getChosenAlternative()) {
- initialiseInterceptors(reg, engine, out, a, useIn);
+ initialiseInterceptors(reg, engine, out, a, useIn, fault);
}
setInterceptors(new ArrayList<Interceptor<? extends
org.apache.cxf.message.Message>>(out));
}
@@ -204,21 +213,31 @@ public class EffectivePolicyImpl impleme
return alternatives;
}
- void initialiseInterceptors(PolicyInterceptorProviderRegistry reg,
+ void initialiseInterceptors(PolicyInterceptorProviderRegistry reg,
PolicyEngineImpl engine,
Set<Interceptor<? extends
org.apache.cxf.message.Message>> out,
Assertion a,
- boolean usIn) {
+ boolean useIn,
+ boolean fault) {
QName qn = a.getName();
- PolicyInterceptorProvider pp = reg.get(qn);
- if (null != pp) {
- out.addAll(usIn ? pp.getInInterceptors() :
pp.getOutInterceptors());
+
+ List<Interceptor<? extends org.apache.cxf.message.Message>> i = null;
+ if (useIn & !fault) {
+ i = reg.getInInterceptorsForAssertion(qn);
+ } else if (!useIn && !fault) {
+ i = reg.getOutInterceptorsForAssertion(qn);
+ } else if (useIn && fault) {
+ i = reg.getInFaultInterceptorsForAssertion(qn);
+ } else if (!useIn && fault) {
+ i = reg.getOutFaultInterceptorsForAssertion(qn);
}
+ out.addAll(i);
+
if (a instanceof PolicyContainingAssertion) {
Policy p = ((PolicyContainingAssertion)a).getPolicy();
if (p != null) {
for (Assertion a2 : getSupportedAlternatives(engine, p)) {
- initialiseInterceptors(reg, engine, out, a2, usIn);
+ initialiseInterceptors(reg, engine, out, a2, useIn, fault);
}
}
}
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInInterceptor.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInInterceptor.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyInInterceptor.java
Fri Apr 6 15:08:43 2012
@@ -19,6 +19,7 @@
package org.apache.cxf.ws.policy;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -66,6 +67,9 @@ public class PolicyInInterceptor extends
return;
}
+ List<Interceptor<? extends Message>> interceptors = new
ArrayList<Interceptor<? extends Message>>();
+ Collection<Assertion> assertions = new ArrayList<Assertion>();
+
// 1. Check overridden policy
Policy p =
(Policy)msg.getContextualProperty(PolicyConstants.POLICY_OVERRIDE);
if (p != null) {
@@ -76,57 +80,32 @@ public class PolicyInInterceptor extends
PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
",
effectivePolicy.getPolicy());
- List<Interceptor<? extends Message>> interceptors =
effectivePolicy.getInterceptors();
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
- }
- Collection<Assertion> assertions =
effectivePolicy.getChosenAlternative();
- if (null != assertions && !assertions.isEmpty()) {
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
- }
- }
-
- // 2. Process client policy
- if (MessageUtils.isRequestor(msg)) {
+ interceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
+ } else if (MessageUtils.isRequestor(msg)) {
+ // 2. Process client policy
BindingOperationInfo boi =
exchange.get(BindingOperationInfo.class);
if (boi == null) {
Conduit conduit = exchange.getConduit(msg);
-
EndpointPolicy ep = pe.getClientEndpointPolicy(ei, conduit);
-
- List<Interceptor<? extends Message>> interceptors =
ep.getInterceptors();
- if (null != interceptors) {
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
- }
- }
-
- // Insert assertions of endpoint's vocabulary into message
- Collection<Assertion> assertions = ep.getVocabulary();
- if (null != assertions && !assertions.isEmpty()) {
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
+ if (ep != null) {
+ interceptors.addAll(ep.getInterceptors());
+ assertions.addAll(ep.getVocabulary());
}
} else {
// We do not know the underlying message type yet - so we
pre-emptively add interceptors
// that can deal with any resposes or faults returned to this
client endpoint.
EffectivePolicy ep = pe.getEffectiveClientResponsePolicy(ei,
boi);
-
- List<Interceptor<? extends Message>> interceptors =
ep.getInterceptors();
- if (null != interceptors) {
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
+ if (ep != null) {
+ interceptors.addAll(ep.getInterceptors());
+ // insert assertions of endpoint's vocabulary into message
+ if (ep.getPolicy() != null) {
+ msg.put(AssertionInfoMap.class, new
AssertionInfoMap(ep.getPolicy()));
+
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
}
}
- // insert assertions of endpoint's vocabulary into message
- if (ep.getPolicy() != null) {
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(ep.getPolicy()));
-
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
- }
}
} else {
// 3. Process server policy
@@ -136,22 +115,22 @@ public class PolicyInInterceptor extends
// that can deal with any messages to this endpoint
EndpointPolicy ep = pe.getServerEndpointPolicy(ei, destination);
-
- List<Interceptor<? extends Message>> interceptors =
ep.getInterceptors();
- if (null != interceptors) {
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
- }
- }
-
- // insert assertions of endpoint's vocabulary into message
-
- Collection<Assertion> assertions = ep.getVocabulary();
- if (null != assertions && !assertions.isEmpty()) {
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
+ if (ep != null) {
+ interceptors.addAll(ep.getInterceptors());
+ assertions.addAll(ep.getVocabulary());
}
}
+
+ // add interceptors into message chain
+ for (Interceptor<? extends Message> i : interceptors) {
+ msg.getInterceptorChain().add(i);
+ }
+
+ // Insert assertions of endpoint's vocabulary into message
+ if (!assertions.isEmpty()) {
+ msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
+
msg.getInterceptorChain().add(PolicyVerificationInInterceptor.INSTANCE);
+ }
+
}
}
\ No newline at end of file
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyOutInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyOutInterceptor.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyOutInterceptor.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/PolicyOutInterceptor.java
Fri Apr 6 15:08:43 2012
@@ -19,6 +19,7 @@
package org.apache.cxf.ws.policy;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -73,6 +74,11 @@ public class PolicyOutInterceptor extend
if (null == pe) {
return;
}
+
+ List<Interceptor<? extends Message>> interceptors = new
ArrayList<Interceptor<? extends Message>>();
+ Collection<Assertion> assertions = new ArrayList<Assertion>();
+
+ // 1. Check overridden policy
Policy p =
(Policy)msg.getContextualProperty(PolicyConstants.POLICY_OVERRIDE);
if (p != null) {
EndpointPolicyImpl endpi = new EndpointPolicyImpl(p);
@@ -82,82 +88,56 @@ public class PolicyOutInterceptor extend
PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
",
effectivePolicy.getPolicy());
- List<Interceptor<? extends Message>> interceptors =
effectivePolicy.getInterceptors();
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
- }
-
- // insert assertions of the chosen alternative into the message
-
- Collection<Assertion> assertions =
effectivePolicy.getChosenAlternative();
- if (null != assertions && !assertions.isEmpty()) {
- if (LOG.isLoggable(Level.FINEST)) {
- StringBuilder buf = new StringBuilder();
- buf.append("Chosen alternative: ");
- String nl =
SystemPropertyAction.getProperty("line.separator");
- buf.append(nl);
- for (Assertion a : assertions) {
- PolicyUtils.printPolicyComponent(a, buf, 1);
- }
- LOG.finest(buf.toString());
- }
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationOutInterceptor.INSTANCE);
- }
+ interceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
} else if (MessageUtils.isRequestor(msg)) {
+ // 2. Process client policy
Conduit conduit = exchange.getConduit(msg);
// add the required interceptors
EffectivePolicy effectivePolicy =
pe.getEffectiveClientRequestPolicy(ei, boi, conduit);
msg.put(EffectivePolicy.class, effectivePolicy);
PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
", effectivePolicy.getPolicy());
-
- List<Interceptor<? extends Message>> interceptors =
effectivePolicy.getInterceptors();
- for (Interceptor<? extends Message> i : interceptors) {
- msg.getInterceptorChain().add(i);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
i.getClass().getSimpleName());
- }
-
- // insert assertions of the chosen alternative into the message
-
- Collection<Assertion> assertions =
effectivePolicy.getChosenAlternative();
- if (null != assertions && !assertions.isEmpty()) {
- if (LOG.isLoggable(Level.FINEST)) {
- StringBuilder buf = new StringBuilder();
- buf.append("Chosen alternative: ");
- String nl =
SystemPropertyAction.getProperty("line.separator");
- buf.append(nl);
- for (Assertion a : assertions) {
- PolicyUtils.printPolicyComponent(a, buf, 1);
- }
- LOG.finest(buf.toString());
- }
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationOutInterceptor.INSTANCE);
+ if (effectivePolicy != null) {
+ interceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
}
} else {
+ // 3. Process server policy
Destination destination = exchange.getDestination();
@SuppressWarnings("unchecked")
List<List<Assertion>> incoming =
(List)exchange.get("ws-policy.validated.alternatives");
EffectivePolicy effectivePolicy
= pe.getEffectiveServerResponsePolicy(ei, boi, destination,
incoming);
msg.put(EffectivePolicy.class, effectivePolicy);
-
- List<Interceptor<? extends Message>> interceptors =
effectivePolicy.getInterceptors();
- for (Interceptor<? extends Message> oi : interceptors) {
- msg.getInterceptorChain().add(oi);
- LOG.log(Level.FINE, "Added interceptor of type {0}",
- oi.getClass().getSimpleName());
+ PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
", effectivePolicy.getPolicy());
+ if (effectivePolicy != null) {
+ interceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
}
-
- // insert assertions of the chosen alternative into the message
-
- Collection<Assertion> assertions =
effectivePolicy.getChosenAlternative();
- if (null != assertions && !assertions.isEmpty()) {
- msg.put(AssertionInfoMap.class, new
AssertionInfoMap(assertions));
-
msg.getInterceptorChain().add(PolicyVerificationOutInterceptor.INSTANCE);
+ }
+
+ // add interceptors into message chain
+ for (Interceptor<? extends Message> oi : interceptors) {
+ msg.getInterceptorChain().add(oi);
+ LOG.log(Level.FINE, "Added interceptor of type {0}",
+ oi.getClass().getSimpleName());
+ }
+
+ // insert assertions of endpoint's fault vocabulary into message
+ if (null != assertions && !assertions.isEmpty()) {
+ if (LOG.isLoggable(Level.FINEST)) {
+ StringBuilder buf = new StringBuilder();
+ buf.append("Chosen alternative: ");
+ String nl = SystemPropertyAction.getProperty("line.separator");
+ buf.append(nl);
+ for (Assertion a : assertions) {
+ PolicyUtils.printPolicyComponent(a, buf, 1);
+ }
+ LOG.finest(buf.toString());
}
+ msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
+
msg.getInterceptorChain().add(PolicyVerificationOutInterceptor.INSTANCE);
}
}
}
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/ServerPolicyOutFaultInterceptor.java
Fri Apr 6 15:08:43 2012
@@ -19,6 +19,7 @@
package org.apache.cxf.ws.policy;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.logging.Level;
@@ -38,6 +39,7 @@ import org.apache.cxf.service.model.Bind
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.Destination;
import org.apache.neethi.Assertion;
+import org.apache.neethi.Policy;
/**
*
@@ -81,31 +83,46 @@ public class ServerPolicyOutFaultInterce
Destination destination = exchange.getDestination();
Exception ex = exchange.get(Exception.class);
- assert null != ex;
- BindingFaultInfo bfi = getBindingFaultInfo(msg, ex, boi);
-
- if (bfi == null
- && msg.get(FaultMode.class) !=
FaultMode.UNCHECKED_APPLICATION_FAULT
- && msg.get(FaultMode.class) !=
FaultMode.CHECKED_APPLICATION_FAULT) {
- return;
+ List<Interceptor<? extends Message>> faultInterceptors =
+ new ArrayList<Interceptor<? extends Message>>();
+ Collection<Assertion> assertions = new ArrayList<Assertion>();
+
+ // 1. Check overridden policy
+ Policy p =
(Policy)msg.getContextualProperty(PolicyConstants.POLICY_OVERRIDE);
+ if (p != null) {
+ EndpointPolicyImpl endpi = new EndpointPolicyImpl(p);
+ EffectivePolicyImpl effectivePolicy = new EffectivePolicyImpl();
+ effectivePolicy.initialise(endpi, (PolicyEngineImpl)pe, false,
true);
+ PolicyUtils.logPolicy(LOG, Level.FINEST, "Using effective policy:
",
+ effectivePolicy.getPolicy());
+
+ faultInterceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
+ } else {
+ // 2. Process effective server policy
+ BindingFaultInfo bfi = getBindingFaultInfo(msg, ex, boi);
+
+ if (bfi == null
+ && msg.get(FaultMode.class) !=
FaultMode.UNCHECKED_APPLICATION_FAULT
+ && msg.get(FaultMode.class) !=
FaultMode.CHECKED_APPLICATION_FAULT) {
+ return;
+ }
+
+ EffectivePolicy effectivePolicy =
pe.getEffectiveServerFaultPolicy(ei, boi, bfi, destination);
+ if (effectivePolicy != null) {
+ faultInterceptors.addAll(effectivePolicy.getInterceptors());
+ assertions.addAll(effectivePolicy.getChosenAlternative());
+ }
}
-
- EffectivePolicy effectivePolicy = pe.getEffectiveServerFaultPolicy(ei,
boi, bfi, destination);
- if (effectivePolicy == null) {
- return;
- }
-
- List<Interceptor<? extends Message>> interceptors =
effectivePolicy.getInterceptors();
- for (Interceptor<? extends Message> oi : interceptors) {
+ // add interceptors into message chain
+ for (Interceptor<? extends Message> oi : faultInterceptors) {
msg.getInterceptorChain().add(oi);
LOG.log(Level.FINE, "Added interceptor of type {0}",
oi.getClass().getSimpleName());
}
// insert assertions of the chosen alternative into the message
-
- Collection<Assertion> assertions =
effectivePolicy.getChosenAlternative();
if (null != assertions && !assertions.isEmpty()) {
msg.put(AssertionInfoMap.class, new AssertionInfoMap(assertions));
}
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/EffectivePolicyImplTest.java
Fri Apr 6 15:08:43 2012
@@ -271,9 +271,28 @@ public class EffectivePolicyImplTest ext
control.verify();
}
- @SuppressWarnings("unchecked")
@Test
public void testInitialiseOutInterceptors() {
+ testInitialiseInterceptors(false, false);
+ }
+
+ @Test
+ public void testInitialiseInInterceptors() {
+ testInitialiseInterceptors(true, false);
+ }
+
+ @Test
+ public void testInitialiseOutFaultInterceptors() {
+ testInitialiseInterceptors(false, true);
+ }
+
+ @Test
+ public void testInitialiseInFaultInterceptors() {
+ testInitialiseInterceptors(true, true);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void testInitialiseInterceptors(boolean useIn, boolean fault) {
EffectivePolicyImpl epi = new EffectivePolicyImpl();
List<Assertion> alternative = new ArrayList<Assertion>();
epi.setChosenAlternative(alternative);
@@ -283,16 +302,19 @@ public class EffectivePolicyImplTest ext
setupPolicyInterceptorProviderRegistry(engine, reg);
control.replay();
- epi.initialiseInterceptors(engine);
+ epi.initialiseInterceptors(engine, useIn, fault);
assertEquals(0, epi.getInterceptors().size());
control.verify();
control.reset();
setupPolicyInterceptorProviderRegistry(engine, reg);
+
+ List<Interceptor<? extends Message>> m = new ArrayList<Interceptor<?
extends Message>>();
+ setupRegistryInterceptors(useIn, fault, reg, null, m);
PolicyAssertion a = control.createMock(PolicyAssertion.class);
alternative.add(a);
control.replay();
- epi.initialiseInterceptors(engine);
+ epi.initialiseInterceptors(engine, useIn, fault);
assertEquals(0, epi.getInterceptors().size());
control.verify();
@@ -300,9 +322,10 @@ public class EffectivePolicyImplTest ext
setupPolicyInterceptorProviderRegistry(engine, reg);
QName qn = new QName("http://x.y.z", "a");
EasyMock.expect(a.getName()).andReturn(qn);
- EasyMock.expect(reg.get(qn)).andReturn(null);
+ m = new ArrayList<Interceptor<? extends Message>>();
+ setupRegistryInterceptors(useIn, fault, reg, qn, m);
control.replay();
- epi.initialiseInterceptors(engine);
+ epi.initialiseInterceptors(engine, useIn, fault);
assertEquals(0, epi.getInterceptors().size());
control.verify();
@@ -312,14 +335,32 @@ public class EffectivePolicyImplTest ext
PolicyInterceptorProvider pp =
control.createMock(PolicyInterceptorProvider.class);
EasyMock.expect(reg.get(qn)).andReturn(pp);
Interceptor<Message> pi = control.createMock(Interceptor.class);
- List<Interceptor<? extends Message>> m = new ArrayList<Interceptor<?
extends Message>>();
+ m = new ArrayList<Interceptor<? extends Message>>();
m.add(pi);
- EasyMock.expect(pp.getOutInterceptors()).andReturn(m);
+ setupRegistryInterceptors(useIn, fault, reg, qn, m);
control.replay();
- epi.initialiseInterceptors(engine);
+ epi.initialiseInterceptors(engine, useIn, fault);
assertEquals(1, epi.getInterceptors().size());
assertSame(pi, epi.getInterceptors().get(0));
- control.verify();
+ control.verify();
+ }
+
+ private void setupRegistryInterceptors(boolean useIn, boolean fault,
+ PolicyInterceptorProviderRegistry
reg, QName qn,
+ List<Interceptor<? extends
Message>> m) {
+ if (useIn && !fault) {
+ EasyMock.expect(reg.getInInterceptorsForAssertion(qn))
+ .andReturn(m);
+ } else if (!useIn && !fault) {
+ EasyMock.expect(reg.getOutInterceptorsForAssertion(qn))
+ .andReturn(m);
+ } else if (useIn && fault) {
+ EasyMock.expect(reg.getInFaultInterceptorsForAssertion(qn))
+ .andReturn(m);
+ } else if (!useIn && fault) {
+ EasyMock.expect(reg.getOutFaultInterceptorsForAssertion(qn))
+ .andReturn(m);
+ }
}
private void setupPolicyInterceptorProviderRegistry(PolicyEngineImpl
engine,
Modified:
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java?rev=1310385&r1=1310384&r2=1310385&view=diff
==============================================================================
---
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java
(original)
+++
cxf/branches/2.5.x-fixes/rt/ws/policy/src/test/java/org/apache/cxf/ws/policy/PolicyInterceptorsTest.java
Fri Apr 6 15:08:43 2012
@@ -25,6 +25,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import javax.xml.namespace.QName;
+
import org.apache.cxf.Bus;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.helpers.CastUtils;
@@ -50,6 +52,7 @@ import org.junit.Test;
*
*/
public class PolicyInterceptorsTest extends Assert {
+ private static final QName ASSERTION_QNAME = new
QName("http://apache.cxf", "test");
private IMocksControl control;
private Message message;
@@ -58,7 +61,7 @@ public class PolicyInterceptorsTest exte
private Endpoint endpoint;
private EndpointInfo ei;
private Bus bus;
- private PolicyEngine pe;
+ private PolicyEngineImpl pe;
private Conduit conduit;
private Destination destination;
@@ -277,6 +280,96 @@ public class PolicyInterceptorsTest exte
control.verify();
}
+ @Test
+ public void testClientPolicyInInterceptorPolicyOverride() {
+ PolicyInInterceptor interceptor = new PolicyInInterceptor();
+
+ doTestBasics(interceptor, true, false);
+
+ control.reset();
+ setupMessage(true, true, true, true, true, true);
+ coachPolicyOverride(true, false);
+
+ control.replay();
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
+ @Test
+ public void testClientPolicyOutInterceptorPolicyOverride() {
+ PolicyOutInterceptor interceptor = new PolicyOutInterceptor();
+
+ doTestBasics(interceptor, true, true);
+
+ control.reset();
+ setupMessage(true, true, true, true, true, true);
+ coachPolicyOverride(false, false);
+
+ control.replay();
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
+ @Test
+ public void testServerPolicyInInterceptorPolicyOverride() {
+ PolicyInInterceptor interceptor = new PolicyInInterceptor();
+
+ doTestBasics(interceptor, false, false);
+
+ control.reset();
+ setupMessage(false, false, false, false, true, true);
+ coachPolicyOverride(true, false);
+
+ control.replay();
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
+ @Test
+ public void testServerPolicyOutInterceptorPolicyOverride() {
+ PolicyOutInterceptor interceptor = new PolicyOutInterceptor();
+
+ doTestBasics(interceptor, false, true);
+
+ control.reset();
+ setupMessage(false, false, true, true, true, true);
+ coachPolicyOverride(false, false);
+
+ control.replay();
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
+
+ @Test
+ public void testClientPolicyInFaultInterceptorPolicyOverride() {
+ ClientPolicyInFaultInterceptor interceptor = new
ClientPolicyInFaultInterceptor();
+
+ doTestBasics(interceptor, true, false);
+
+ control.reset();
+ setupMessage(true, true, false, false, true, true);
+ coachPolicyOverride(true, true);
+
+ control.replay();
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
+ @Test
+ public void testServerPolicyOutFaultInterceptorPolicyOverride() {
+ ServerPolicyOutFaultInterceptor interceptor = new
ServerPolicyOutFaultInterceptor();
+ doTestBasics(interceptor, false, true);
+
+ control.reset();
+ setupMessage(false, false, true, true, true, true);
+ coachPolicyOverride(false, true);
+ control.replay();
+
+ interceptor.handleMessage(message);
+ control.verify();
+ }
+
private void doTestBasics(Interceptor<Message> interceptor, boolean
isClient, boolean usesOperationInfo) {
setupMessage(!isClient, isClient, usesOperationInfo,
!usesOperationInfo, false, false);
control.replay();
@@ -322,7 +415,8 @@ public class PolicyInterceptorsTest exte
if (null == boi && setupOperation) {
boi = control.createMock(BindingOperationInfo.class);
}
-
EasyMock.expect(exchange.get(BindingOperationInfo.class)).andReturn(setupOperation
? boi : null);
+
EasyMock.expect(exchange.get(BindingOperationInfo.class)).andReturn(setupOperation
? boi : null)
+ .anyTimes();
if (!setupOperation) {
return;
}
@@ -341,7 +435,7 @@ public class PolicyInterceptorsTest exte
EasyMock.expect(endpoint.getEndpointInfo()).andReturn(ei);
if (null == pe && setupEngine) {
- pe = control.createMock(PolicyEngine.class);
+ pe = control.createMock(PolicyEngineImpl.class);
}
EasyMock.expect(bus.getExtension(PolicyEngine.class)).andReturn(setupEngine ?
pe : null);
if (!setupEngine) {
@@ -354,8 +448,42 @@ public class PolicyInterceptorsTest exte
EasyMock.expect(exchange.getConduit(message)).andReturn(conduit).anyTimes();
} else {
destination = control.createMock(Destination.class);
- EasyMock.expect(exchange.getDestination()).andReturn(destination);
+
EasyMock.expect(exchange.getDestination()).andReturn(destination).anyTimes();
+ }
+ }
+
+ private void coachPolicyOverride(boolean in, boolean fault) {
+ Assertion assertion = control.createMock(Assertion.class);
+ EasyMock.expect(assertion.getName()).andReturn(ASSERTION_QNAME);
+ Collection<Assertion> assertions =
+ new ArrayList<Assertion>();
+ assertions.add(assertion);
+
+ Policy policyOverride = control.createMock(Policy.class);
+
EasyMock.expect(message.getContextualProperty(PolicyConstants.POLICY_OVERRIDE))
+ .andReturn(policyOverride);
+ AlternativeSelector selector =
control.createMock(AlternativeSelector.class);
+ EasyMock.expect(selector.selectAlternative(policyOverride, pe, null,
null)).andReturn(assertions);
+ EasyMock.expect(pe.getAlternativeSelector()).andReturn(selector);
+ EasyMock.expect(pe.getBus()).andReturn(bus).anyTimes();
+ PolicyInterceptorProviderRegistry reg = control
+ .createMock(PolicyInterceptorProviderRegistry.class);
+
EasyMock.expect(bus.getExtension(PolicyInterceptorProviderRegistry.class)).andReturn(reg);
+
+ List<Interceptor<? extends Message>> li = createMockInterceptorList();
+ if (in && fault) {
+
EasyMock.expect(reg.getInFaultInterceptorsForAssertion(ASSERTION_QNAME)).andReturn(li);
+ } else if (!in && fault) {
+
EasyMock.expect(reg.getOutFaultInterceptorsForAssertion(ASSERTION_QNAME)).andReturn(li);
+ } else if (in && !fault) {
+
EasyMock.expect(reg.getInInterceptorsForAssertion(ASSERTION_QNAME)).andReturn(li);
+ } else if (!in && !fault) {
+
EasyMock.expect(reg.getOutInterceptorsForAssertion(ASSERTION_QNAME)).andReturn(li);
}
-
+ InterceptorChain ic = control.createMock(InterceptorChain.class);
+
EasyMock.expect(message.getInterceptorChain()).andReturn(ic).anyTimes();
+ ic.add(li.get(0));
+ EasyMock.expectLastCall();
}
+
}