ws-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wer...@apache.org
Subject svn commit: r358799 - /webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
Date Fri, 23 Dec 2005 13:14:30 GMT
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());
+	}
 }



Mime
View raw message