You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/01/15 20:18:32 UTC

svn commit: r899766 - in /tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src: main/java/org/apache/tuscany/sca/policy/wspolicy/ main/java/org/apache/tuscany/sca/policy/wspolicy/xml/ main/resources/META-INF/services/ test/java/org/apache/tuscany/sca...

Author: slaws
Date: Fri Jan 15 19:18:31 2010
New Revision: 899766

URL: http://svn.apache.org/viewvc?rev=899766&view=rev
Log:
A bit more progress on the ws policy model. Not working yet. 

Modified:
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
    tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java?rev=899766&r1=899765&r2=899766&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java Fri Jan 15 19:18:31 2010
@@ -39,7 +39,7 @@
 import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
 
 /**
- * The WS-Policy model. Defers to the Neethi policy model under the covers. 
+ * The WS-Policy model. Currently defers to the Neethi policy model under the covers. 
  */
 public class WSPolicy  {
 
@@ -49,6 +49,7 @@
     public final static QName WS_POLICY_QNAME = new QName(WS_POLICY_NS, WS_POLICY);
 
     private Policy neethiPolicy;
+    private List<Object> policyAssertions = new ArrayList<Object>();
 
     public QName getSchemaName() {
         return WS_POLICY_QNAME;
@@ -61,6 +62,10 @@
     public void setNeethiPolicy(Policy neethiPolicy) {
         this.neethiPolicy = neethiPolicy;
     }
+    
+    public List<Object> getPolicyAssertions(){
+        return policyAssertions;
+    }
 
     @Override
     public String toString() {

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java?rev=899766&r1=899765&r2=899766&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java Fri Jan 15 19:18:31 2010
@@ -19,7 +19,14 @@
 
 package org.apache.tuscany.sca.policy.wspolicy.xml;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -30,7 +37,12 @@
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.neethi.All;
+import org.apache.neethi.Constants;
+import org.apache.neethi.ExactlyOne;
+import org.apache.neethi.PolicyComponent;
 import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.PolicyOperator;
 import org.apache.tuscany.sca.common.xml.stax.StAXHelper;
 import org.apache.tuscany.sca.common.xml.stax.reader.XMLDocumentStreamReader;
 import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
@@ -42,6 +54,7 @@
 import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
 import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
 import org.apache.tuscany.sca.policy.wspolicy.WSPolicy;
 
 /**
@@ -52,9 +65,22 @@
 public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
     StAXArtifactProcessor<WSPolicy> {
     
+    protected ExtensionPointRegistry registry;
     protected StAXArtifactProcessor<Object> extensionProcessor;
-
-    public WSPolicyProcessor(ExtensionPointRegistry registry) {
+    protected StAXAttributeProcessor<Object> extensionAttributeProcessor;
+    protected XMLInputFactory inputFactory;
+    protected XMLOutputFactory outputFactory;
+
+    public WSPolicyProcessor(ExtensionPointRegistry registry,
+                             StAXArtifactProcessor extensionProcessor,
+                             StAXAttributeProcessor extensionAttributeProcessor) {
+        this.registry = registry;
+        this.extensionProcessor = extensionProcessor;
+        this.extensionAttributeProcessor = extensionAttributeProcessor;
+        
+        FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
+        this.inputFactory = modelFactories.getFactory(XMLInputFactory.class);
+        this.outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
     }
 
     public QName getArtifactType() {
@@ -76,10 +102,46 @@
         WSPolicy wsPolicy = new WSPolicy();
         wsPolicy.setNeethiPolicy(neethiPolicy);
         
-        // read policy assertions        
+        // read policy assertions   
+        readPolicyAssertions(wsPolicy,neethiPolicy, context);
         
         return wsPolicy;
     }
+    
+    private void readPolicyAssertions(WSPolicy wsPolicy, PolicyComponent policyComponent, ProcessorContext context){
+        
+        // recurse into the policy alternatives
+        if (policyComponent.getType() != Constants.TYPE_ASSERTION){
+            PolicyOperator policyOperator = (PolicyOperator)policyComponent;
+            for(Object childComponent : policyOperator.getPolicyComponents()){
+                // TODO - create assertion hierarchy in wsPolicy model
+                //        how we do this depends on if we continue to use neethi
+                readPolicyAssertions(wsPolicy, (PolicyComponent)childComponent, context);
+            }
+        } else {
+            try {
+                // TODO - not sure we should keep the neethi model but hack for the
+                //        time being to get Tuscany processors to process the OMElements
+                //        help within the neethi model
+                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+                XMLStreamWriter writer = outputFactory.createXMLStreamWriter(outputStream);
+                
+                policyComponent.serialize(writer);
+                
+                ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+                XMLStreamReader reader = inputFactory.createXMLStreamReader(inputStream);
+
+                Object tuscanyAssertion = extensionProcessor.read(reader, context);
+                
+                if (tuscanyAssertion != null) {
+                    wsPolicy.getPolicyAssertions().add(tuscanyAssertion);
+                }
+            } catch (Exception ex) {
+                // TODO - report the error properly
+                ex.printStackTrace();
+            }
+        }
+    }
 
     public void write(WSPolicy wsPolicy, XMLStreamWriter writer, ProcessorContext context)
         throws ContributionWriteException, XMLStreamException {

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor?rev=899766&r1=899765&r2=899766&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor Fri Jan 15 19:18:31 2010
@@ -1,20 +1,20 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you 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. 
-
-# Implementation class for the artifact processor extension
-org.apache.tuscany.sca.policy.xml.ws.WSPolicyProcessor;qname=http://schemas.xmlsoap.org/ws/2004/09/policy#Policy,model=org.apache.neethi.Policy
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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. 
+
+# Implementation class for the artifact processor extension
+org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;qname=http://schemas.xmlsoap.org/ws/2004/09/policy#Policy,model=org.apache.neethi.Policy
 

Modified: tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java?rev=899766&r1=899765&r2=899766&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java Fri Jan 15 19:18:31 2010
@@ -25,13 +25,28 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamReader;
 
 import junit.framework.TestCase;
 
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXAttributeProcessor;
 import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXAttributeProcessorExtensionPoint;
 import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.definitions.Definitions;
+import org.apache.tuscany.sca.policy.PolicySet;
 import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
+import org.apache.tuscany.sca.policy.xml.PolicySetProcessor;
 import org.junit.Assert;
 
 /**
@@ -42,7 +57,8 @@
 public class WSPolicyTestCase extends TestCase {
 
     private static final String WS_POLICY1 =
-        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<definitions xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
+      + "<definitions xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
             + " targetNamespace=\"http://test\""
             + " xmlns:test=\"http://test\""
             + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\">"
@@ -73,10 +89,11 @@
             + "    </wsp:ExactlyOne>"
             + " </wsp:Policy>"
             + " </policySet>"
-            + " </definitions>";
+      + " </definitions>";
     
     private static final String WS_POLICY2 =
-        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<definitions xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
+        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 
+      + "<definitions xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
             + " targetNamespace=\"http://test\""
             + " xmlns:test=\"http://test\""
             + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\">"
@@ -107,7 +124,7 @@
             + "    </wsp:ExactlyOne>"
             + " </wsp:Policy>"
             + " </policySet>"
-            + " </definitions>";    
+      + " </definitions>";    
 
     private XMLInputFactory inputFactory;
 
@@ -117,64 +134,53 @@
     }
 
     public void testReadWsPolicy() throws Exception {
-        XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(WS_POLICY1));
-        WSPolicyProcessor processor = new WSPolicyProcessor(new DefaultExtensionPointRegistry());
+        // Set up the runtime
+        ExtensionPointRegistry registry = new DefaultExtensionPointRegistry();
+        
+        FactoryExtensionPoint modelFactories = registry.getExtensionPoint(FactoryExtensionPoint.class);
+        
+        XMLInputFactory inputFactory = modelFactories.getFactory(XMLInputFactory.class);
+        XMLOutputFactory outputFactory = modelFactories.getFactory(XMLOutputFactory.class);
+        
+        StAXArtifactProcessorExtensionPoint artifactExtensionPoint = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        StAXArtifactProcessor<Object> extensibleStAXProcessor = new ExtensibleStAXArtifactProcessor(artifactExtensionPoint, inputFactory, outputFactory);
+        artifactExtensionPoint.addArtifactProcessor(new TuscanyWSPolicyAssertionProcessor());
+        
+        StAXAttributeProcessorExtensionPoint attributeExtensionPoint = registry.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
+        StAXAttributeProcessor<Object> extensibleStAXAttributeProcessor = new ExtensibleStAXAttributeProcessor(attributeExtensionPoint, inputFactory, outputFactory);
+        
+        
+        
+        StAXArtifactProcessor processor = artifactExtensionPoint.getProcessor(Definitions.class);
+        
         Object artifact = null;
-
-        QName name = null;
-        reader.next();
-        while (true) {
-            int event = reader.getEventType();
-            switch (event) {
-                case START_ELEMENT: {
-                    name = reader.getName();
-
-                    if (WSPolicy.WS_POLICY_QNAME.equals(name)) {
-                        artifact = processor.read(reader, new ProcessorContext());
-                    }
-
-                    break;
-                }
-            }
-
-            if (reader.hasNext()) {
-                reader.next();
-            } else {
-                break;
-            }
-        }
+        
+        // Read the first definitions string
+        
+        XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(WS_POLICY1));
+        
+        artifact = processor.read(reader, new ProcessorContext());
         assertNotNull(artifact);
-        Assert.assertTrue(artifact instanceof WSPolicy);
-        WSPolicy policy1 = (WSPolicy) artifact;
+        Assert.assertTrue(artifact instanceof Definitions);
+        Definitions definitions1 = (Definitions) artifact;
 
+        // Read the second definitions string
+        
         reader = inputFactory.createXMLStreamReader(new StringReader(WS_POLICY2));
 
-        reader.next();
-        while (true) {
-            int event = reader.getEventType();
-            switch (event) {
-                case START_ELEMENT: {
-                    name = reader.getName();
-
-                    if (WSPolicy.WS_POLICY_QNAME.equals(name)) {
-                        artifact = processor.read(reader, new ProcessorContext());
-                    }
-
-                    break;
-                }
-            }
-
-            if (reader.hasNext()) {
-                reader.next();
-            } else {
-                break;
-            }
-        } 
-        
+        artifact = processor.read(reader, new ProcessorContext());
         assertNotNull(artifact);
-        Assert.assertTrue(artifact instanceof WSPolicy);
-        WSPolicy policy2 = (WSPolicy) artifact;   
+        Assert.assertTrue(artifact instanceof Definitions);
+        Definitions definitions2 = (Definitions) artifact;  
+        
+        // compare the policies using the policy builder
+        
+        // create dummy endpoints and endpoint references
+        AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);
+        EndpointReference epr = assemblyFactory.createEndpointReference();
+        Endpoint ep = assemblyFactory.createEndpoint();
         
+        // ...
         
     }
 }