/* * 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)); } } }