You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ws.apache.org by we...@apache.org on 2005/12/22 15:28:13 UTC

svn commit: r358570 - in /webservices/commons/trunk/policy/src/examples: WSSPolicyProcessorFull.java policy2Normalized.xml

Author: werner
Date: Thu Dec 22 06:28:08 2005
New Revision: 358570

URL: http://svn.apache.org/viewcvs?rev=358570&view=rev
Log:
A more elaborated example that performs better parsing.

Added:
    webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
    webservices/commons/trunk/policy/src/examples/policy2Normalized.xml

Added: webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java?rev=358570&view=auto
==============================================================================
--- webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java (added)
+++ webservices/commons/trunk/policy/src/examples/WSSPolicyProcessorFull.java Thu Dec 22 06:28:08 2005
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package examples;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.ws.policy.AndCompositeAssertion;
+import org.apache.ws.policy.Policy;
+import org.apache.ws.policy.Assertion;
+import org.apache.ws.policy.PrimitiveAssertion;
+import org.apache.ws.policy.XorCompositeAssertion;
+import org.apache.ws.policy.util.PolicyReader;
+import org.apache.ws.policy.util.PolicyFactory;
+
+/**
+ * @author Werner Dittmann (werner@apache.org)
+ */
+
+public class WSSPolicyProcessorFull {
+
+	FileInputStream fis = null;
+
+	PolicyReader prdr = null;
+
+	Policy merged = null;
+
+	int level = 0;
+
+	public static void main(String[] args) throws Exception {
+
+		WSSPolicyProcessorFull processor = new WSSPolicyProcessorFull();
+		processor.setup();
+		String[] files = new String[1];
+		files[0] = "policy/src/examples/policy2.xml";
+		processor.go(files);
+		System.out
+				.println("\n ----------------------------------------------------");
+		files = new String[2];
+		files[0] = "policy/src/examples/SecurityPolicyBindings.xml";
+		files[1] = "policy/src/examples/SecurityPolicyMsg.xml";
+		processor.go(files);
+	}
+
+	void setup() {
+		prdr = PolicyFactory.getPolicyReader(PolicyFactory.OM_POLICY_READER);
+
+	}
+
+	void go(String[] args) {
+
+		merged = null;
+		for (int i = 0; i < args.length; i++) {
+			try {
+				fis = new FileInputStream(args[i]);
+			} catch (FileNotFoundException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+			Policy newPolicy = prdr.readPolicy(fis);
+			newPolicy = (Policy) newPolicy.normalize();
+
+			if (merged == null) {
+				merged = newPolicy;
+			} else {
+				merged = (Policy) merged.merge(newPolicy);
+			}
+			try {
+				fis.close();
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+		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 ..
+	 * 
+	 */
+
+	public void 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();
+
+		int numberOfAlternatives = listOfPolicyAlternatives.size();
+
+		for (int i = 0; i < numberOfAlternatives; i++) {
+			AndCompositeAssertion aPolicyAlternative = (AndCompositeAssertion) listOfPolicyAlternatives
+					.get(i);
+
+			List listOfAssertions = aPolicyAlternative.getTerms();
+
+			Iterator iterator = listOfAssertions.iterator();
+			while (iterator.hasNext()) {
+				Assertion assertion = (Assertion) iterator.next();
+				if (assertion instanceof Policy) {
+					processPolicy((Policy) assertion);
+					continue;
+				}
+				if (!(assertion instanceof PrimitiveAssertion)) {
+					System.out.println("Got a unexpected assertion type: "
+							+ assertion.getClass().getName());
+					continue;
+				}
+				processPrimitiveAssertion((PrimitiveAssertion) assertion);
+			}
+		}
+	}
+
+	void 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
+		 */
+		if (pa.getName().getNamespaceURI().equals(
+				"http://schemas.xmlsoap.org/ws/2005/07/securitypolicy")) {
+			loadConfigurations(pa);
+		}
+
+		List terms = pa.getTerms();
+		if (terms.size() > 0) {
+			for (int i = 0; i < terms.size(); i++) {
+				level++;
+				Assertion assertion = (Assertion) pa.getTerms().get(i);
+				if (assertion instanceof Policy) {
+					assertion = assertion.normalize();
+					processPolicy((Policy) assertion);
+				} else if (assertion instanceof PrimitiveAssertion) {
+					processPrimitiveAssertion((PrimitiveAssertion) assertion);
+				}
+				level--;
+			}
+		}
+	}
+
+	public void loadConfigurations(PrimitiveAssertion prim) {
+
+		/*
+		 * May be I should be setting the configuration options in
+		 * WSDoAll*Handler according to this security assertion.
+		 */
+		StringBuffer indent = new StringBuffer();
+		for (int i = 0; i < level; i++) {
+			indent.append("  ");
+		}
+		System.out.println(new String(indent) + prim.getName().getLocalPart());
+
+	}
+
+}

Added: webservices/commons/trunk/policy/src/examples/policy2Normalized.xml
URL: http://svn.apache.org/viewcvs/webservices/commons/trunk/policy/src/examples/policy2Normalized.xml?rev=358570&view=auto
==============================================================================
--- webservices/commons/trunk/policy/src/examples/policy2Normalized.xml (added)
+++ webservices/commons/trunk/policy/src/examples/policy2Normalized.xml Thu Dec 22 06:28:08 2005
@@ -0,0 +1,26 @@
+<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" wsu:Id="myPolicy">
+  <wsp:ExactlyOne>
+    <wsp:All>
+      <sec:SecurityHeader xmlns:sec="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" MustManifestEncryption="true" MustPrepend="true">
+      </sec:SecurityHeader>
+      <sec:SecurityToken xmlns:sec="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
+	    <sec:TokenType>sec:X509v3</sec:TokenType>
+	  </sec:SecurityToken>
+	  <sec:Integrity xmlns:sec="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" wsp:Optional="false">
+	    <sec:MessageParts Dialect="http://schemas.xmlsoap.org/ws/2002/12/wsse#soap">
+           wsp:Body()
+    	</sec:MessageParts>
+      </sec:Integrity>
+    </wsp:All>
+    <wsp:All>
+      <sec:SecurityToken xmlns:sec="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">    
+        <sec:TokenType>sec:X509v3</sec:TokenType>
+      </sec:SecurityToken>
+      <sec:Integrity xmlns:sec="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" wsp:Optional="false">
+  		<sec:MessageParts Dialect="http://schemas.xmlsoap.org/ws/2002/12/wsse#soap">
+      	  wsp:Body()
+    	</sec:MessageParts>
+      </sec:Integrity>
+    </wsp:All>
+  </wsp:ExactlyOne>
+</wsp:Policy>
\ No newline at end of file