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