Author: werner
Date: Fri Dec 23 05:14:26 2005
New Revision: 358799
URL: http://svn.apache.org/viewcvs?rev=358799&view=rev
Log:
Some comments, insert checks to qualify policy
Modified:
webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
Modified:
webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
URL:
http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java?rev=358799&r1=358798&r2=358799&view=diff
==============================================================================
--- webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
(original)
+++ webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
Fri Dec 23 05:14:26 2005
@@ -94,39 +94,55 @@
processPolicy(merged);
}
- /*
- * This method takes a policy object which contains policy alternatives.
- * WSS4J framework should configure it self in accordance with
- * WSSecurityPolicy policy assertions if there is any in that policy
- * alternative. If that alternative contains any WSSecurityPolicy policy
- * assertion which WSS4J cannot support, it should throw an exception
and
- * notify ..
+ /**
+ * This method takes a normalized policy object, processes it and
returns
+ * true if all assertion can be fulfilled.
*
+ * Each policy must be nromalized accordig to the WS Policy framework
+ * specification. Therefore a policy has one child (wsp:ExactlyOne)
that is
+ * a XorCompositeAssertion. This child may contain one or more other
terms
+ * (alternatives). To match the policy one of these terms (alternatives)
+ * must match. If none of the contained terms match this policy cannot
be
+ * enforced.
+ *
+ * @param policy
+ * The policy to process
+ * @return True if this policy can be enforced by the policy enforcement
+ * implmentation
*/
-
- public void processPolicy(Policy policy) {
+ public boolean processPolicy(Policy policy) {
if (!policy.isNormalized()) {
throw new RuntimeException("Policy is not in normalized
format");
}
+ /*
+ *
+ */
XorCompositeAssertion xor = (XorCompositeAssertion)
policy.getTerms()
.get(0);
List listOfPolicyAlternatives = xor.getTerms();
+ boolean success = false;
int numberOfAlternatives = listOfPolicyAlternatives.size();
- for (int i = 0; i < numberOfAlternatives; i++) {
+ for (int i = 0; !success && i < numberOfAlternatives; i++) {
AndCompositeAssertion aPolicyAlternative =
(AndCompositeAssertion) listOfPolicyAlternatives
.get(i);
List listOfAssertions = aPolicyAlternative.getTerms();
Iterator iterator = listOfAssertions.iterator();
- while (iterator.hasNext()) {
+ /*
+ * Loop over all assertions in this alternative. If all
assertions
+ * can be fulfilled then we choose this alternative and
signal a
+ * success.
+ */
+ boolean all = true;
+ while (all && iterator.hasNext()) {
Assertion assertion = (Assertion)
iterator.next();
if (assertion instanceof Policy) {
- processPolicy((Policy) assertion);
+ all = processPolicy((Policy) assertion);
continue;
}
if (!(assertion instanceof PrimitiveAssertion))
{
@@ -134,39 +150,53 @@
+
assertion.getClass().getName());
continue;
}
- processPrimitiveAssertion((PrimitiveAssertion)
assertion);
+ all =
processPrimitiveAssertion((PrimitiveAssertion) assertion);
}
+ /*
+ * copy the status of assertion processing. If all is
true the this
+ * alternative is "success"ful
+ */
+ success = all;
}
+ return success;
}
- void processPrimitiveAssertion(PrimitiveAssertion pa) {
+ boolean processPrimitiveAssertion(PrimitiveAssertion pa) {
/*
* We need to pick only the primitive assertions which conatain
a
* WSSecurityPolicy policy assertion. For that we'll check the
namespace
* of the primitive assertion
*/
+ boolean commit = true;
+
if (pa.getName().getNamespaceURI().equals(
"http://schemas.xmlsoap.org/ws/2005/07/securitypolicy")) {
- loadConfigurations(pa);
+ commit = startPolicyTransaction(pa);
}
List terms = pa.getTerms();
if (terms.size() > 0) {
- for (int i = 0; i < terms.size(); i++) {
+ for (int i = 0; commit && i < terms.size(); i++) {
level++;
Assertion assertion = (Assertion)
pa.getTerms().get(i);
if (assertion instanceof Policy) {
assertion = assertion.normalize();
- processPolicy((Policy) assertion);
+ commit = processPolicy((Policy)
assertion);
} else if (assertion instanceof
PrimitiveAssertion) {
-
processPrimitiveAssertion((PrimitiveAssertion) assertion);
+ commit =
processPrimitiveAssertion((PrimitiveAssertion) assertion);
}
level--;
}
}
+ if (commit) {
+ commitPolicyTransaction(pa);
+ } else {
+ abortPolicyTransaction(pa);
+ }
+ return commit;
}
- public void loadConfigurations(PrimitiveAssertion prim) {
+ public boolean startPolicyTransaction(PrimitiveAssertion prim) {
/*
* May be I should be setting the configuration options in
@@ -177,7 +207,24 @@
indent.append(" ");
}
System.out.println(new String(indent) +
prim.getName().getLocalPart());
+ String text = prim.getStrValue();
+ if (text != null) {
+ text = text.trim();
+ System.out
+ .println(new String(indent) + "Value: "
+ text.toString());
+ }
+ if (prim.getName().getLocalPart().equals("SecurityHeader"))
+ return false;
+ return true;
+ }
+ public void abortPolicyTransaction(PrimitiveAssertion prim) {
+ System.out.println("Aborting Policy transaction "
+ + prim.getName().getLocalPart());
}
+ public void commitPolicyTransaction(PrimitiveAssertion prim) {
+ System.out.println("Commit Policy transaction "
+ + prim.getName().getLocalPart());
+ }
}