summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src')
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java74
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java173
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java180
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.PolicyBuilder17
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor20
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TestModelResolver.java64
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertion.java40
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertionProcessor.java60
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java199
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessorTestCase.java140
-rw-r--r--sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/resources/org/apache/tuscany/sca/policy/wspolicy/test_definitions.xml192
11 files changed, 1159 insertions, 0 deletions
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
new file mode 100644
index 0000000000..6938b72d82
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicy.java
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.neethi.Policy;
+import org.apache.tuscany.sca.policy.PolicyContainer;
+
+/**
+ * The WS-Policy model. Currently defers to the Neethi policy model under the covers.
+ */
+public class WSPolicy implements PolicyContainer {
+
+ public final static String WS_POLICY_NS = "http://schemas.xmlsoap.org/ws/2004/09/policy";
+ public final static String WS_POLICY = "Policy";
+
+ 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;
+ }
+
+ public Policy getNeethiPolicy() {
+ return neethiPolicy;
+ }
+
+ public void setNeethiPolicy(Policy neethiPolicy) {
+ this.neethiPolicy = neethiPolicy;
+ }
+
+ public List<Object> getPolicyAssertions(){
+ return policyAssertions;
+ }
+
+ @Override
+ public String toString() {
+ return "WSPolicy [" + neethiPolicy + "]";
+ }
+
+ public <T> Object getChildPolicy(Class<T> policyType) {
+ for (Object alternative : policyAssertions){
+ for (Object policy : (List<Object>)alternative){
+ if (policyType.isInstance(policy)){
+ return policy;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
new file mode 100644
index 0000000000..d6bd710ed9
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyBuilder.java
@@ -0,0 +1,173 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.neethi.Policy;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.assembly.builder.BuilderContext;
+import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
+import org.apache.tuscany.sca.policy.PolicyExpression;
+import org.apache.tuscany.sca.policy.PolicySet;
+import org.apache.tuscany.sca.policy.PolicySubject;
+
+/**
+ * Processing for WS-Policy objects
+ * TBD
+ */
+public class WSPolicyBuilder implements PolicyBuilder<Policy> {
+
+ public boolean build(Endpoint endpoint, BuilderContext context) {
+ List<WSPolicy> polices = getPolicies(endpoint);
+ System.out.println(endpoint + ": " + polices);
+ return true;
+ }
+
+ public boolean build(EndpointReference endpointReference, BuilderContext context) {
+ List<WSPolicy> polices = getPolicies(endpointReference);
+ System.out.println(endpointReference + ": " + polices);
+ return true;
+ }
+
+ public boolean build(Component component, Implementation implementation, BuilderContext context) {
+ List<WSPolicy> polices = getPolicies(implementation);
+ System.out.println(implementation + ": " + polices);
+ return true;
+ }
+
+ public QName getPolicyType() {
+ return WSPolicy.WS_POLICY_QNAME;
+ }
+
+ public List<QName> getSupportedBindings() {
+ return null;
+ }
+
+ public boolean build(EndpointReference endpointReference, Endpoint endpoint, BuilderContext context) {
+
+ // TODO - neethi doesn't include code for matching ws policy
+ // cxf have the class Intersector http://svn.apache.org/repos/asf/cxf/trunk/api/src/main/java/org/apache/cxf/ws/policy/Intersector.java
+ // but this does its work based on the cxf AssertionBuilders and extension
+ // registry mechanism. I don't want to commit to that at the moment.
+ //
+ // At the moment we do the simplest top level QName based matching
+
+ // match EPR policy sets
+ for (PolicySet eprPolicySet : endpointReference.getPolicySets()){
+ for (PolicySet epPolicySet : endpoint.getPolicySets()){
+ if (!build(eprPolicySet, epPolicySet)){
+ return false;
+ }
+ }
+ }
+
+ // match EP policy sets
+ for (PolicySet epPolicySet : endpoint.getPolicySets()){
+ for (PolicySet eprPolicySet : endpointReference.getPolicySets()){
+ if (!build(epPolicySet, eprPolicySet)){
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private boolean build(PolicySet policySet1, PolicySet policySet2){
+
+ // extract the ws policy expressions out of the policy sets
+ List<PolicyExpression> policyExpressions1 = new ArrayList<PolicyExpression>();
+ List<PolicyExpression> policyExpressions2 = new ArrayList<PolicyExpression>();
+
+ for (PolicyExpression policyExpression : policySet1.getPolicies()){
+ if (policyExpression.getName().equals(getPolicyType())){
+ policyExpressions1.add(policyExpression);
+ }
+ }
+
+ for (PolicyExpression policyExpression : policySet2.getPolicies()){
+ if (policyExpression.getName().equals(getPolicyType())){
+ policyExpressions2.add(policyExpression);
+ }
+ }
+
+ // Match the first set of expressions against the second set
+ for (PolicyExpression policyExpression1 : policyExpressions1){
+ for (PolicyExpression policyExpression2 : policyExpressions2){
+ if (!build((WSPolicy)policyExpression1.getPolicy(),
+ (WSPolicy)policyExpression2.getPolicy())){
+ return false;
+ }
+ }
+ }
+
+ // TODO set the reference policy set to include an interception of the
+ // ws policy sets discovered here
+ // Do we really need to do this?
+ // The method is called in both directions (reference to service and
+ // service to reference) so would need to fix that
+
+ return true;
+ }
+
+ private List<WSPolicy> getPolicies(PolicySubject subject) {
+ List<WSPolicy> polices = new ArrayList<WSPolicy>();
+ for (PolicySet ps : subject.getPolicySets()) {
+ for (PolicyExpression exp : ps.getPolicies()) {
+ if (getPolicyType().equals(exp.getName())) {
+ polices.add((WSPolicy)exp.getPolicy());
+ }
+ }
+ }
+ return polices;
+ }
+
+ private boolean build(WSPolicy wsPolicy1, WSPolicy wsPolicy2){
+ // TODO - cheating here as we assume a flat policy structure
+ // we've read all the policy assertions into Tuscany models
+ // in the reader (without taking account of alternatives)
+ // so we just compare those here
+ // The real implementation of this comparison depends on how
+ // we decide to represent the ws policy hierarchy
+
+ for (Object policyAssertion1 : wsPolicy1.getPolicyAssertions()){
+ boolean matched = false;
+ for (Object policyAssertion2 : wsPolicy2.getPolicyAssertions()){
+ if (policyAssertion1.getClass() == policyAssertion2.getClass()){
+ matched = true;
+ break;
+ }
+ }
+ if(!matched){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
new file mode 100644
index 0000000000..48bf932c27
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessor.java
@@ -0,0 +1,180 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy.xml;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.neethi.Constants;
+import org.apache.neethi.PolicyComponent;
+import org.apache.neethi.PolicyEngine;
+import org.apache.neethi.PolicyOperator;
+import org.apache.tuscany.sca.common.xml.stax.reader.XMLDocumentStreamReader;
+import org.apache.tuscany.sca.contribution.processor.BaseStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+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;
+
+/**
+ * Processor for handling xml models of PolicySet definitions
+ *
+ * @version $Rev$ $Date$
+ */
+public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
+ StAXArtifactProcessor<WSPolicy> {
+
+ protected ExtensionPointRegistry registry;
+ protected StAXArtifactProcessor<Object> extensionProcessor;
+ 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() {
+ return WSPolicy.WS_POLICY_QNAME;
+ }
+
+ public Class<WSPolicy> getModelType() {
+ return WSPolicy.class;
+ }
+
+ public WSPolicy read(XMLStreamReader reader, ProcessorContext context)
+ throws ContributionReadException, XMLStreamException {
+ org.apache.neethi.Policy neethiPolicy = null;
+ XMLDocumentStreamReader doc = new XMLDocumentStreamReader(reader);
+ StAXOMBuilder builder = new StAXOMBuilder(doc);
+ OMElement element = builder.getDocumentElement();
+ neethiPolicy = PolicyEngine.getPolicy(element);
+
+ WSPolicy wsPolicy = new WSPolicy();
+ wsPolicy.setNeethiPolicy(neethiPolicy);
+
+ // normalize the neethi tree so we can easily identify
+ // the policy alternatives
+ neethiPolicy.normalize(true);
+
+ // top-level children of ExactlyOne are policy alternatives so
+ // for each child create a policy model list and pull the
+ // policies out
+ for(Object alternative : neethiPolicy.getPolicyComponents()) {
+ List<Object> assertions = new ArrayList<Object>();
+ readPolicyAssertions(assertions, (PolicyComponent)alternative, context);
+ wsPolicy.getPolicyAssertions().add(assertions);
+ }
+
+
+ return wsPolicy;
+ }
+
+ private void readPolicyAssertions(List<Object> policyAssertions, PolicyComponent policyComponent, ProcessorContext context){
+
+ // recurse into the policy alternatives
+ // TODO - lots of todos here as this just walks down the neethi hierarchy
+ // looking for assertions to drive Tuscany processors without
+ // regard to the policy alternatives. Undecided about whether to
+ // commit to prepresenting this hierarchy in Tuscany or whether
+ // to rely on neethi
+ // Should this be in the builder? Not really as this drives the
+ // Tuscany specific readers
+ 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(policyAssertions, (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
+ // 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 neethiAssertion = policyComponent;
+ Object tuscanyAssertion = extensionProcessor.read(reader, context);
+
+ if (tuscanyAssertion != null) {
+ policyAssertions.add(tuscanyAssertion);
+ } else {
+ // add neethi assertion
+ policyAssertions.add(neethiAssertion);
+ }
+ } catch (Exception ex) {
+ // TODO - report the error properly
+ ex.printStackTrace();
+ }
+ }
+ }
+
+ public void write(WSPolicy wsPolicy, XMLStreamWriter writer, ProcessorContext context)
+ throws ContributionWriteException, XMLStreamException {
+
+ // Write an <sca:policySet>
+ writer.writeStartElement(WSPolicy.WS_POLICY_NS, WSPolicy.WS_POLICY);
+
+ if (wsPolicy != null) {
+ wsPolicy.getNeethiPolicy().serialize(writer);
+ }
+
+ writer.writeEndElement();
+ }
+
+ public void resolve(WSPolicy wsPolicy, ModelResolver resolver, ProcessorContext context)
+ throws ContributionResolveException {
+
+ // resolve policy assertions
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.PolicyBuilder b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.PolicyBuilder
new file mode 100644
index 0000000000..e161411be3
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.PolicyBuilder
@@ -0,0 +1,17 @@
+# 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.
+org.apache.tuscany.sca.policy.wspolicy.WSPolicyBuilder;qname=http://schemas.xmlsoap.org/ws/2004/09/policy#Policy
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
new file mode 100644
index 0000000000..745ad35871
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
@@ -0,0 +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.wspolicy.xml.WSPolicyProcessor;qname=http://schemas.xmlsoap.org/ws/2004/09/policy#Policy,model=org.apache.neethi.Policy
+
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TestModelResolver.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TestModelResolver.java
new file mode 100644
index 0000000000..593f56e7f9
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TestModelResolver.java
@@ -0,0 +1,64 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+
+/**
+ * A default implementation of an artifact resolver, based on a map.
+ *
+ * @version $Rev$ $Date$
+ */
+public class TestModelResolver implements ModelResolver {
+ private static final long serialVersionUID = -7826976465762296634L;
+
+ private Map<Object, Object> map = new HashMap<Object, Object>();
+
+ public TestModelResolver() {
+ }
+
+ public <T> T resolveModel(Class<T> modelClass, T unresolved, ProcessorContext context) {
+ Object resolved = map.get(unresolved);
+ if (resolved != null) {
+
+ // Return the resolved object
+ return modelClass.cast(resolved);
+
+ } else {
+
+ // Return the unresolved object
+ return unresolved;
+ }
+ }
+
+ public void addModel(Object resolved, ProcessorContext context) {
+ map.put(resolved, resolved);
+ }
+
+ public Object removeModel(Object resolved, ProcessorContext context) {
+ return map.remove(resolved);
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertion.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertion.java
new file mode 100644
index 0000000000..5b4172563a
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertion.java
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import javax.xml.namespace.QName;
+import org.apache.tuscany.sca.assembly.Base;
+
+/**
+ * The WS-Policy model. Defers to the Neethi policy model under the covers.
+ */
+public class TuscanyWSPolicyAssertion {
+
+ static final String SCA11_TUSCANY_NS = Base.SCA11_TUSCANY_NS;
+ static final QName TUSCANY_WS_POLICY_ASSERTION_QNAME = new QName(SCA11_TUSCANY_NS, "tuscanyWSPolicyAssertion");
+
+ private String anAttribute;
+
+ public QName getSchemaName() {
+ return TUSCANY_WS_POLICY_ASSERTION_QNAME;
+ }
+
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertionProcessor.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertionProcessor.java
new file mode 100644
index 0000000000..065feb012c
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/TuscanyWSPolicyAssertionProcessor.java
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ */
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+import org.apache.tuscany.sca.assembly.Base;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ *
+ * @version $Rev$ $Date$
+ */
+public class TuscanyWSPolicyAssertionProcessor implements StAXArtifactProcessor<TuscanyWSPolicyAssertion> {
+
+ public QName getArtifactType() {
+ return new QName(Base.SCA11_TUSCANY_NS, "tuscanyWSPolicyAssertion");
+ }
+
+ public TuscanyWSPolicyAssertion read(XMLStreamReader arg0, ProcessorContext context) throws ContributionReadException, XMLStreamException {
+ return new TuscanyWSPolicyAssertion();
+ }
+
+ public void write(TuscanyWSPolicyAssertion arg0, XMLStreamWriter arg1, ProcessorContext context) throws ContributionWriteException,
+ XMLStreamException {
+ }
+
+ public Class<TuscanyWSPolicyAssertion> getModelType() {
+ // TODO Auto-generated method stub
+ return TuscanyWSPolicyAssertion.class;
+ }
+
+ public void resolve(TuscanyWSPolicyAssertion arg0, ModelResolver arg1, ProcessorContext context) throws ContributionResolveException {
+
+ }
+
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java
new file mode 100644
index 0000000000..b4c72b5235
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/WSPolicyTestCase.java
@@ -0,0 +1,199 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy;
+
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.io.StringReader;
+
+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.assembly.builder.BuilderContext;
+import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
+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.monitor.Monitor;
+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;
+
+/**
+ * Test reading SCA XML assembly documents.
+ *
+ * @version $Rev$ $Date$
+ */
+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\""
+ + " targetNamespace=\"http://test\""
+ + " xmlns:test=\"http://test\""
+ + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\">"
+ + " "
+ + " <policySet name=\"SecureWSPolicy\""
+ + " provides=\"test:confidentiality\""
+ + " appliesTo=\"sca:binding.ws\""
+ + " xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
+ + " xmlns:sp=\"http://schemas.xmlsoap.org/ws/2002/12/secext\""
+ + " xmlns:tuscany=\"http://tuscany.apache.org/xmlns/sca/1.1\""
+ + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\">"
+ + " <wsp:Policy>"
+ + " <wsp:ExactlyOne>"
+ + " <wsp:All>"
+ + " <tuscany:tuscanyWSPolicyAssertion anAttribute=\"fred\"/>"
+ + " <sp:SecurityToken>"
+ + " <sp:TokenType>sp:X509v3</sp:TokenType>"
+ + " </sp:SecurityToken>"
+ + " <sp:UsernameToken />"
+ + " <sp:SignedParts />"
+ + " <sp:EncryptedParts>"
+ + " <sp:Body />"
+ + " </sp:EncryptedParts>"
+ + " <sp:TransportBinding>"
+ + " <sp:IncludeTimeStamp />"
+ + " </sp:TransportBinding>"
+ + " </wsp:All>"
+ + " </wsp:ExactlyOne>"
+ + " </wsp:Policy>"
+ + " </policySet>"
+ + " </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\""
+ + " targetNamespace=\"http://test\""
+ + " xmlns:test=\"http://test\""
+ + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\">"
+ + " "
+ + " <policySet name=\"SecureWSPolicy\""
+ + " provides=\"test:confidentiality\""
+ + " appliesTo=\"sca:binding.ws\""
+ + " xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
+ + " xmlns:sp=\"http://schemas.xmlsoap.org/ws/2002/12/secext\""
+ + " xmlns:tuscany=\"http://tuscany.apache.org/xmlns/sca/1.1\""
+ + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\">"
+ + " <wsp:Policy>"
+ + " <wsp:ExactlyOne>"
+ + " <wsp:All>"
+ + " <tuscany:tuscanyWSPolicyAssertion anAttribute=\"jim\"/>"
+ + " <sp:SecurityToken>"
+ + " <sp:TokenType>sp:X509v3</sp:TokenType>"
+ + " </sp:SecurityToken>"
+ + " <sp:UsernameToken />"
+ + " <sp:SignedParts />"
+ + " <sp:EncryptedParts>"
+ + " <sp:Body />"
+ + " </sp:EncryptedParts>"
+ + " <sp:TransportBinding>"
+ + " <sp:IncludeTimeStamp />"
+ + " </sp:TransportBinding>"
+ + " </wsp:All>"
+ + " </wsp:ExactlyOne>"
+ + " </wsp:Policy>"
+ + " </policySet>"
+ + " </definitions>";
+
+ private XMLInputFactory inputFactory;
+
+ @Override
+ public void setUp() throws Exception {
+ inputFactory = XMLInputFactory.newInstance();
+ }
+
+ public void testReadWsPolicy() throws Exception {
+ // 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);
+
+ BuilderExtensionPoint builderExtensionPoint = registry.getExtensionPoint(BuilderExtensionPoint.class);
+
+ StAXArtifactProcessor processor = artifactExtensionPoint.getProcessor(Definitions.class);
+
+ Object artifact = null;
+
+ // 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 Definitions);
+ Definitions definitions1 = (Definitions) artifact;
+
+ // Read the second definitions string
+
+ reader = inputFactory.createXMLStreamReader(new StringReader(WS_POLICY2));
+
+ artifact = processor.read(reader, new ProcessorContext());
+ assertNotNull(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();
+
+ // add the ws polices we've just read to the epr/ep
+ epr.getPolicySets().add(definitions1.getPolicySets().get(0));
+ ep.getPolicySets().add(definitions1.getPolicySets().get(0));
+
+ BuilderContext builderContext = new BuilderContext((Monitor)null);
+
+ for (PolicyBuilder policyBuilder : builderExtensionPoint.getPolicyBuilders()) {
+ System.out.println("PolicyBuilder: " + policyBuilder.toString());
+ assertTrue(policyBuilder.build(epr, ep, builderContext));
+ }
+
+ }
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessorTestCase.java b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessorTestCase.java
new file mode 100644
index 0000000000..1c9c9b706a
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/java/org/apache/tuscany/sca/policy/wspolicy/xml/WSPolicyProcessorTestCase.java
@@ -0,0 +1,140 @@
+/*
+ * 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.
+ */
+
+package org.apache.tuscany.sca.policy.wspolicy.xml;
+
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.io.StringReader;
+
+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.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.policy.wspolicy.TuscanyWSPolicyAssertionProcessor;
+import org.apache.tuscany.sca.policy.wspolicy.WSPolicy;
+import org.apache.tuscany.sca.policy.wspolicy.xml.WSPolicyProcessor;
+import org.junit.Assert;
+
+/**
+ * Test reading SCA XML assembly documents.
+ *
+ * @version $Rev$ $Date$
+ */
+public class WSPolicyProcessorTestCase extends TestCase {
+
+ private static final String VALID_WS_POLICY =
+ "<?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\">"
+ + " "
+ + " <policySet name=\"SecureWSPolicy\""
+ + " provides=\"test:confidentiality\""
+ + " appliesTo=\"sca:binding.ws\""
+ + " xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\""
+ + " xmlns:sp=\"http://schemas.xmlsoap.org/ws/2002/12/secext\""
+ + " xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2004/09/policy\">"
+ + " <wsp:Policy>"
+ + " <wsp:ExactlyOne>"
+ + " <wsp:All>"
+ + " <sp:SecurityToken>"
+ + " <sp:TokenType>sp:X509v3</sp:TokenType>"
+ + " </sp:SecurityToken>"
+ + " <sp:UsernameToken />"
+ + " <sp:SignedParts />"
+ + " <sp:EncryptedParts>"
+ + " <sp:Body />"
+ + " </sp:EncryptedParts>"
+ + " <sp:TransportBinding>"
+ + " <sp:IncludeTimeStamp />"
+ + " </sp:TransportBinding>"
+ + " </wsp:All>"
+ + " </wsp:ExactlyOne>"
+ + " </wsp:Policy>"
+ + " </policySet>"
+ + " </definitions>";
+
+ private XMLInputFactory inputFactory;
+
+ @Override
+ public void setUp() throws Exception {
+ inputFactory = XMLInputFactory.newInstance();
+
+ }
+
+ public void testReadWsPolicy() throws Exception {
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(VALID_WS_POLICY));
+
+ 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);
+ StAXAttributeProcessorExtensionPoint attributeExtensionPoint = registry.getExtensionPoint(StAXAttributeProcessorExtensionPoint.class);
+ StAXAttributeProcessor<Object> extensibleStAXAttributeProcessor = new ExtensibleStAXAttributeProcessor(attributeExtensionPoint, inputFactory, outputFactory);
+
+ WSPolicyProcessor processor = new WSPolicyProcessor(new DefaultExtensionPointRegistry(),
+ extensibleStAXProcessor,
+ extensibleStAXAttributeProcessor);
+
+ 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;
+ }
+ }
+ assertNotNull(artifact);
+ Assert.assertTrue(artifact instanceof WSPolicy);
+ WSPolicy policy = (WSPolicy) artifact;
+ Assert.assertTrue(policy.getNeethiPolicy().getAlternatives().hasNext());
+ }
+}
diff --git a/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/resources/org/apache/tuscany/sca/policy/wspolicy/test_definitions.xml b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/resources/org/apache/tuscany/sca/policy/wspolicy/test_definitions.xml
new file mode 100644
index 0000000000..600ac8e267
--- /dev/null
+++ b/sca-java-2.x/branches/2.0-Beta1/modules/policy-wspolicy/src/test/resources/org/apache/tuscany/sca/policy/wspolicy/test_definitions.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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.
+-->
+<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">
+
+<policySet name="SecureWSPolicy"
+ provides="test:confidentiality"
+ appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
+ xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:Policy>
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:UsernameToken />
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ </policySet>
+
+<policySet name="WSPolicy1"
+ provides="test:confidentiality"
+ appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
+ xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:Policy>
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:UsernameToken />
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ </policySet>
+
+ <policySet name="WSPolicy2"
+ provides="test:confidentiality"
+ appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
+ xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:Policy>
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ </policySet>
+
+ <policySet name="WSPolicy3"
+ provides="test:confidentiality"
+ appliesTo="sca:binding.ws"
+ xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
+ xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
+ <wsp:Policy>
+ <wsp:ExactlyOne>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ <wsp:All>
+ <sp:SecurityToken>
+ <sp:TokenType>sp:X509v3</sp:TokenType>
+ </sp:SecurityToken>
+ <sp:UsernameToken />
+ <sp:SignedParts />
+ <sp:EncryptedParts>
+ <sp:Body />
+ </sp:EncryptedParts>
+ <sp:TransportBinding>
+ <sp:IncludeTimeStamp />
+ </sp:TransportBinding>
+ </wsp:All>
+ </wsp:ExactlyOne>
+ </wsp:Policy>
+ </policySet>
+
+<!-- profile intent -->
+ <intent name="reliableMessageProtection"
+ constrains="sca:binding"
+ requires="test:messageProtection">
+ <description>
+ Protect messages from unauthorized reading or modification
+ </description>
+ </intent>
+
+ <intent name="messageProtection"
+ constrains="sca:binding"
+ requires="test:confidentiality test:integrity">
+ <description>
+ Protect messages from unauthorized reading or modification
+ </description>
+ </intent>
+
+<!-- simple intent -->
+ <intent name="confidentiality"
+ constrains="sca:binding">
+ <description>
+ Communitcation thro this binding must prevent
+ unauthorized users from reading the messages.
+ </description>
+ </intent>
+
+ <intent name="integrity"
+ constrains="sca:binding">
+ <description>
+ Communitcation thro this binding must prevent
+ unauthorized modification of the messages.
+ </description>
+ </intent>
+
+ <intent name="authentication"
+ constrains="sca:binding">
+ <description>
+ Communitcation thro this binding required
+ Authentication.
+ </description>
+ </intent>
+
+ <intent name="logging"
+ constrains="sca:implementation">
+ <description>
+ All messages to and from this implementation must be logged
+ </description>
+ </intent>
+
+ <intent name="tracing"
+ constrains="sca:implementation.java">
+ <description>
+ Need to figure out some description for this
+ </description>
+ </intent>
+
+</definitions> \ No newline at end of file