/*
* 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: 900349 $ $Date: 2010-01-18 11:41:13 +0000 (Mon, 18 Jan 2010) $
*/
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());
}
}