summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-12-11 00:59:45 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-12-11 00:59:45 +0000
commit0f4450efb862e469b071e75f4d9c85ee0f83bc6e (patch)
tree0ea6995c68bc14a237987d4b14ea08c9d4549c8a
parent528a5f1ceef7db3f9e4d82afceee49a9aad5ecb5 (diff)
Simplify the WS-Policy read/save
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@889485 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--sca-java-2.x/trunk/modules/policy-xml-ws/META-INF/MANIFEST.MF2
-rw-r--r--sca-java-2.x/trunk/modules/policy-xml-ws/src/main/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessor.java80
-rw-r--r--sca-java-2.x/trunk/modules/policy-xml-ws/src/test/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessorTestCase.java93
3 files changed, 90 insertions, 85 deletions
diff --git a/sca-java-2.x/trunk/modules/policy-xml-ws/META-INF/MANIFEST.MF b/sca-java-2.x/trunk/modules/policy-xml-ws/META-INF/MANIFEST.MF
index 786770b789..141ba1a196 100644
--- a/sca-java-2.x/trunk/modules/policy-xml-ws/META-INF/MANIFEST.MF
+++ b/sca-java-2.x/trunk/modules/policy-xml-ws/META-INF/MANIFEST.MF
@@ -10,7 +10,9 @@ Bundle-Description: Apache Tuscany SCA Policy XML WS Model
Import-Package: javax.xml.namespace,
javax.xml.stream,
org.apache.axiom.om,
+ org.apache.axiom.om.impl.builder,
org.apache.neethi,
+ org.apache.tuscany.sca.common.xml.stax.reader;version="2.0.0",
org.apache.tuscany.sca.contribution.processor;version="2.0.0",
org.apache.tuscany.sca.contribution.resolver;version="2.0.0",
org.apache.tuscany.sca.core;version="2.0.0",
diff --git a/sca-java-2.x/trunk/modules/policy-xml-ws/src/main/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessor.java b/sca-java-2.x/trunk/modules/policy-xml-ws/src/main/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessor.java
index 760ce7c8da..ddb2a94d16 100644
--- a/sca-java-2.x/trunk/modules/policy-xml-ws/src/main/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessor.java
+++ b/sca-java-2.x/trunk/modules/policy-xml-ws/src/main/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessor.java
@@ -19,8 +19,6 @@
package org.apache.tuscany.sca.policy.xml.ws;
-import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
-
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
@@ -31,7 +29,10 @@ import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.neethi.PolicyEngine;
+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;
import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
@@ -39,68 +40,66 @@ 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;
-import org.apache.tuscany.sca.core.FactoryExtensionPoint;
-
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
/**
* Processor for handling xml models of PolicySet definitions
*
* @version $Rev$ $Date$
*/
-public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements StAXArtifactProcessor<org.apache.neethi.Policy> {
+public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements
+ StAXArtifactProcessor<org.apache.neethi.Policy> {
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);
- public WSPolicyProcessor() {
- }
-
- public WSPolicyProcessor(FactoryExtensionPoint modelFactories) {
+ public final static QName WS_POLICY_QNAME = new QName(WS_POLICY_NS, WS_POLICY);
+ private StAXHelper stAXHelper;
+
+ public WSPolicyProcessor(ExtensionPointRegistry registry) {
+ this.stAXHelper = StAXHelper.getInstance(registry);
}
-
+
public QName getArtifactType() {
return WS_POLICY_QNAME;
}
-
+
public Class<org.apache.neethi.Policy> getModelType() {
return org.apache.neethi.Policy.class;
}
- public org.apache.neethi.Policy read(XMLStreamReader reader, ProcessorContext context) throws ContributionReadException, XMLStreamException {
- org.apache.neethi.Policy wsPolicy = null;
-
- int event = reader.getEventType();
- if (event == START_ELEMENT) {
- QName name = reader.getName();
- if (WS_POLICY_QNAME.equals(name)) {
- OMElement policyElement = loadElement(reader);
- wsPolicy = PolicyEngine.getPolicy(policyElement);
- }
- }
- return wsPolicy;
+ public org.apache.neethi.Policy read(XMLStreamReader reader, ProcessorContext context)
+ throws ContributionReadException, XMLStreamException {
+ org.apache.neethi.Policy wsPolicy = null;
+ XMLDocumentStreamReader doc = new XMLDocumentStreamReader(reader);
+ StAXOMBuilder builder = new StAXOMBuilder(doc);
+ OMElement element = builder.getDocumentElement();
+ wsPolicy = PolicyEngine.getPolicy(element);
+ return wsPolicy;
}
-
- public void write(org.apache.neethi.Policy wsPolicy, XMLStreamWriter writer, ProcessorContext context) throws ContributionWriteException, XMLStreamException {
+
+ public void write(org.apache.neethi.Policy wsPolicy, XMLStreamWriter writer, ProcessorContext context)
+ throws ContributionWriteException, XMLStreamException {
// Write an <sca:policySet>
writer.writeStartElement(WS_POLICY_NS, WS_POLICY);
-
- //FIXME write proper ws-policy stuff here
-
+
+ if (wsPolicy != null) {
+ wsPolicy.serialize(writer);
+ }
+
writer.writeEndElement();
}
- public void resolve(org.apache.neethi.Policy wsPolicy, ModelResolver resolver, ProcessorContext context) throws ContributionResolveException {
+ public void resolve(org.apache.neethi.Policy wsPolicy, ModelResolver resolver, ProcessorContext context)
+ throws ContributionResolveException {
- }
+ }
-
private OMElement loadElement(XMLStreamReader reader) throws XMLStreamException {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMElement head = fac.createOMElement(reader.getName());
OMElement current = head;
-
+
while (true) {
switch (reader.next()) {
case XMLStreamConstants.START_ELEMENT:
@@ -114,7 +113,7 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements StAX
child.declareNamespace(ns, prefix);
}
- if(!"".equals(name.getNamespaceURI())) {
+ if (!"".equals(name.getNamespaceURI())) {
child.declareNamespace(name.getNamespaceURI(), name.getPrefix());
}
@@ -126,11 +125,11 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements StAX
String prefix = reader.getAttributePrefix(i);
String qname = reader.getAttributeLocalName(i);
String value = reader.getAttributeValue(i);
-
- if ( ns != null ) {
+
+ if (ns != null) {
omNs = fac.createOMNamespace(ns, prefix);
}
-
+
child.addAttribute(qname, value, omNs);
if (ns != null) {
child.declareNamespace(ns, prefix);
@@ -145,7 +144,7 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements StAX
fac.createOMText(current, reader.getText());
break;
case XMLStreamConstants.END_ELEMENT:
- if ( current == head ) {
+ if (current == head) {
return head;
} else {
current = (OMElement)current.getParent();
@@ -153,6 +152,5 @@ public class WSPolicyProcessor extends BaseStAXArtifactProcessor implements StAX
}
}
}
-
- }
+}
diff --git a/sca-java-2.x/trunk/modules/policy-xml-ws/src/test/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessorTestCase.java b/sca-java-2.x/trunk/modules/policy-xml-ws/src/test/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessorTestCase.java
index 47cf0e5c2f..09c988fff4 100644
--- a/sca-java-2.x/trunk/modules/policy-xml-ws/src/test/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessorTestCase.java
+++ b/sca-java-2.x/trunk/modules/policy-xml-ws/src/test/java/org/apache/tuscany/sca/policy/xml/ws/WSPolicyProcessorTestCase.java
@@ -29,7 +29,10 @@ import javax.xml.stream.XMLStreamReader;
import junit.framework.TestCase;
+import org.apache.neethi.Policy;
import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.junit.Assert;
/**
* Test reading SCA XML assembly documents.
@@ -37,75 +40,77 @@ import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
* @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/200903\""
- + " targetNamespace=\"http://test\""
- + " xmlns:test=\"http://test\""
- + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\">"
+
+ private static final String VALID_WS_POLICY =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<definitions xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\""
+ + " targetNamespace=\"http://test\""
+ + " xmlns:test=\"http://test\""
+ + " xmlns:sca=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\">"
+ " "
+ " <policySet name=\"SecureWSPolicy\""
+ " provides=\"test:confidentiality\""
- + " appliesTo=\"sca:binding.ws\""
- + " xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\""
- + " 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>"
+ + " appliesTo=\"sca:binding.ws\""
+ + " xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200903\""
+ + " 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;
-
+
+ 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));
- WSPolicyProcessor processor = new WSPolicyProcessor();
- Object artifact = null;
-
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(new StringReader(VALID_WS_POLICY));
+ WSPolicyProcessor processor = new WSPolicyProcessor(new DefaultExtensionPointRegistry());
+ Object artifact = null;
+
QName name = null;
reader.next();
- while ( true ) {
+ while (true) {
int event = reader.getEventType();
switch (event) {
case START_ELEMENT: {
- name = reader.getName();
-
- if(WSPolicyProcessor.WS_POLICY_QNAME.equals(name)) {
- artifact = processor.read(reader, new ProcessorContext());
- }
-
+ name = reader.getName();
+
+ if (WSPolicyProcessor.WS_POLICY_QNAME.equals(name)) {
+ artifact = processor.read(reader, new ProcessorContext());
+ }
+
break;
}
}
-
- if ( reader.hasNext() ) {
+
+ if (reader.hasNext()) {
reader.next();
} else {
break;
}
}
assertNotNull(artifact);
+ Assert.assertTrue(artifact instanceof Policy);
+ Policy policy = (Policy) artifact;
+ Assert.assertTrue(policy.getAlternatives().hasNext());
}
}