Modified: webservices/commons/trunk/modules/neethi/src/main/java/org/apache/neethi/builders/xml/XmlPrimitiveAssertion.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/neethi/src/main/java/org/apache/neethi/builders/xml/XmlPrimitiveAssertion.java?rev=1068627&r1=1068626&r2=1068627&view=diff ============================================================================== --- webservices/commons/trunk/modules/neethi/src/main/java/org/apache/neethi/builders/xml/XmlPrimitiveAssertion.java (original) +++ webservices/commons/trunk/modules/neethi/src/main/java/org/apache/neethi/builders/xml/XmlPrimitiveAssertion.java Tue Feb 8 22:24:36 2011 @@ -19,12 +19,25 @@ package org.apache.neethi.builders.xml; +import java.util.Iterator; + import javax.xml.namespace.QName; +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLEventWriter; +import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.Comment; +import javax.xml.stream.events.Namespace; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; +import javax.xml.transform.dom.DOMSource; + +import org.w3c.dom.Attr; +import org.w3c.dom.Element; -import org.apache.axiom.om.OMAttribute; -import org.apache.axiom.om.OMElement; import org.apache.neethi.All; import org.apache.neethi.Assertion; import org.apache.neethi.Constants; @@ -34,25 +47,25 @@ import org.apache.neethi.PolicyComponent import org.apache.neethi.PolicyRegistry; /** - * XmlPrimitiveAssertion wraps an OMElement s.t. any unknown elements can be + * XmlPrimitiveAssertion wraps an Element s.t. any unknown elements can be * treated an assertions if there is no AssertionBuilder that can build an - * assertion from that OMElement. + * assertion from that Element. * */ public class XmlPrimitiveAssertion implements Assertion { - OMElement element; + Element element; boolean optional; boolean ignorable; /** - * Constructs a XmlPrimitiveAssertion from an OMElement. + * Constructs a XmlPrimitiveAssertion from an Element. * * @param element - * the OMElement from which the XmlAssertion is constructed + * the Element from which the XmlAssertion is constructed */ - public XmlPrimitiveAssertion(OMElement element) { + public XmlPrimitiveAssertion(Element element) { setValue(element); setOptionality(element); setIgnorability(element); @@ -60,28 +73,28 @@ public class XmlPrimitiveAssertion imple /** - * Returns the QName of the wrapped OMElement. + * Returns the QName of the wrapped Element. */ public QName getName() { - return (element != null) ? element.getQName() : null; + return (element != null) ? new QName(element.getNamespaceURI(), element.getLocalName()) : null; } /** - * Sets the wrapped OMElement. + * Sets the wrapped Element. * * @param element - * the OMElement to be set as wrapped + * the Element to be set as wrapped */ - public void setValue(OMElement element) { + public void setValue(Element element) { this.element = element; } /** - * Returns the wrapped OMElement. + * Returns the wrapped Element. * - * @return the wrapped OMElement + * @return the wrapped Element */ - public OMElement getValue() { + public Element getValue() { return element; } @@ -101,7 +114,7 @@ public class XmlPrimitiveAssertion imple } /** - * Returns the partial normalized version of the wrapped OMElement, that is + * Returns the partial normalized version of the wrapped Element, that is * assumed to be an assertion. */ public PolicyComponent normalize() { @@ -110,14 +123,16 @@ public class XmlPrimitiveAssertion imple ExactlyOne exactlyOne = new ExactlyOne(); All all = new All(); - OMElement omElement = element.cloneOMElement(); - - OMAttribute att = omElement.getAttribute(Constants.Q_ELEM_OPTIONAL_ATTR); - if (att == null) { - att = omElement.getAttribute(Constants.Q_ELEM_OPTIONAL_15_ATTR); + Element element = (Element)this.element.cloneNode(true); + Attr attr = element.getAttributeNodeNS(Constants.URI_POLICY_NS, Constants.ATTR_OPTIONAL); + if (attr != null) { + element.removeAttributeNode(attr); + } + attr = element.getAttributeNodeNS(Constants.URI_POLICY_15_NS, Constants.ATTR_OPTIONAL); + if (attr != null) { + element.removeAttributeNode(attr); } - omElement.removeAttribute(att); - all.addPolicyComponent(new XmlPrimitiveAssertion(omElement)); + all.addPolicyComponent(new XmlPrimitiveAssertion(element)); exactlyOne.addPolicyComponent(all); exactlyOne.addPolicyComponent(new All()); @@ -139,8 +154,7 @@ public class XmlPrimitiveAssertion imple public void serialize(XMLStreamWriter writer) throws XMLStreamException { if (element != null) { - element.serialize(writer); - + copyEvents(XMLInputFactory.newInstance().createXMLEventReader(new DOMSource(element)), writer); } else { throw new RuntimeException("Wrapped Element is not set"); } @@ -153,26 +167,23 @@ public class XmlPrimitiveAssertion imple return Constants.TYPE_ASSERTION; } - private void setOptionality(OMElement element) { - OMAttribute attribute = element - .getAttribute(Constants.Q_ELEM_OPTIONAL_ATTR); + private void setOptionality(Element element2) { + Attr attribute = element2.getAttributeNodeNS(Constants.URI_POLICY_NS, Constants.ATTR_OPTIONAL); if (attribute == null) { - attribute = element - .getAttribute(Constants.Q_ELEM_OPTIONAL_15_ATTR); + attribute = element2.getAttributeNodeNS(Constants.URI_POLICY_15_NS, Constants.ATTR_OPTIONAL); } if (attribute != null) { - this.optional = (new Boolean(attribute.getAttributeValue()) + this.optional = (new Boolean(attribute.getValue()) .booleanValue()); } else { this.optional = false; } } - private void setIgnorability(OMElement element2) { - OMAttribute attribute = element - .getAttribute(Constants.Q_ELEM_IGNORABLE_15_ATTR); + private void setIgnorability(Element element2) { + Attr attribute = element2.getAttributeNodeNS(Constants.URI_POLICY_15_NS, Constants.ATTR_IGNORABLE); if (attribute != null) { - this.ignorable = (new Boolean(attribute.getAttributeValue()) + this.ignorable = (new Boolean(attribute.getValue()) .booleanValue()); } else { @@ -188,4 +199,74 @@ public class XmlPrimitiveAssertion imple return getName().equals(((Assertion) policyComponent).getName()); } + + private void copyEvents(XMLEventReader reader, XMLStreamWriter writer) + throws XMLStreamException { + while (reader.hasNext()) { + XMLEvent event = reader.nextEvent(); + + switch (event.getEventType()) { + case XMLEvent.ATTRIBUTE: { + Attribute attr = (Attribute) event; + QName name = attr.getName(); + writer.writeAttribute(name.getPrefix(), name.getNamespaceURI(), + name.getLocalPart(), attr.getValue()); + break; + } + case XMLEvent.START_DOCUMENT: + case XMLEvent.END_DOCUMENT: + //not doing this as we're in a partial write mode + return; + + case XMLEvent.END_ELEMENT: + writer.writeEndElement(); + break; + + case XMLEvent.NAMESPACE: { + Namespace ns = (Namespace) event; + writer.writeNamespace(ns.getPrefix(), ns.getNamespaceURI()); + break; + } + + case XMLEvent.START_ELEMENT: { + StartElement se = event.asStartElement(); + QName n = se.getName(); + writer.writeStartElement(n.getPrefix(), n.getLocalPart(), + n.getNamespaceURI()); + Iterator it = se.getNamespaces(); + while (it.hasNext()) { + Namespace ns = (Namespace) it.next(); + writer.writeNamespace(ns.getPrefix(), ns.getNamespaceURI()); + } + it = se.getAttributes(); + while (it.hasNext()) { + Attribute attr = (Attribute) it.next(); + QName name = attr.getName(); + writer.writeAttribute(name.getPrefix(), name.getNamespaceURI(), + name.getLocalPart(), attr.getValue()); + } + } + break; + + case XMLEvent.CHARACTERS: { + Characters ch = event.asCharacters(); + String text = ch.getData(); + if (ch.isCData()) { + writer.writeCData(text); + } else { + writer.writeCharacters(text); + } + } + break; + + case XMLEvent.CDATA: + writer.writeCData(event.asCharacters().getData()); + break; + + case XMLEvent.COMMENT: + writer.writeComment(((Comment) event).getText()); + break; + } + } + } }
Modified: webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/MergeTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/MergeTest.java?rev=1068627&r1=1068626&r2=1068627&view=diff ============================================================================== --- webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/MergeTest.java (original) +++ webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/MergeTest.java Tue Feb 8 22:24:36 2011 @@ -27,8 +27,20 @@ public class MergeTest extends PolicyTes public MergeTest() { super("MergeTest"); } + public void testOM() throws Exception { + doTest(3); + } + public void testDOM() throws Exception { + doTest(1); + } + public void testStax() throws Exception { + doTest(2); + } + public void testStream() throws Exception { + doTest(3); + } - public void test() throws Exception { + public void doTest(int type) throws Exception { String r1, r2, r3; Policy p1, p2, p3, p4; @@ -52,9 +64,9 @@ public class MergeTest extends PolicyTes r2 = "samples2" + File.separator + "Policy" + f2 + ".xml"; r3 = "merged" + File.separator + f; - p1 = getPolicy(r1); - p2 = getPolicy(r2); - p3 = getPolicy(r3); + p1 = getPolicy(r1, type); + p2 = getPolicy(r2, type); + p3 = getPolicy(r3, type); // result p4 = (Policy)p1.merge(p2); Modified: webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/Normalize2Test.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/Normalize2Test.java?rev=1068627&r1=1068626&r2=1068627&view=diff ============================================================================== --- webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/Normalize2Test.java (original) +++ webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/Normalize2Test.java Tue Feb 8 22:24:36 2011 @@ -28,8 +28,20 @@ public class Normalize2Test extends Poli public Normalize2Test() { super("Normalize2Test"); } + public void testOM() throws Exception { + doTest(3); + } + public void testDOM() throws Exception { + doTest(1); + } + public void testStax() throws Exception { + doTest(2); + } + public void testStream() throws Exception { + doTest(3); + } - public void test() throws Exception { + public void doTest(int type) throws Exception { String r1, r2; Policy p1, p2; @@ -38,10 +50,10 @@ public class Normalize2Test extends Poli r1 = "samples2" + File.separator + "Policy" + i + ".xml"; r2 = "normalized2" + File.separator + "Policy" + i + ".xml"; - p1 = getPolicy(r1); + p1 = getPolicy(r1, type); p1 = (Policy)p1.normalize(true); - p2 = getPolicy(r2); + p2 = getPolicy(r2, type); if (!PolicyComparator.compare(p1, p2)) { fail("samples2" + File.separator + "Policy" + i + ".normalize() FAILED"); Modified: webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/NormalizeTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/NormalizeTest.java?rev=1068627&r1=1068626&r2=1068627&view=diff ============================================================================== --- webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/NormalizeTest.java (original) +++ webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/NormalizeTest.java Tue Feb 8 22:24:36 2011 @@ -34,7 +34,20 @@ public class NormalizeTest extends Polic super("NormalizeTest"); } - public void test() throws Exception { + public void testOM() throws Exception { + doTest(3); + } + public void testDOM() throws Exception { + doTest(1); + } + public void testStax() throws Exception { + doTest(2); + } + public void testStream() throws Exception { + doTest(3); + } + + public void doTest(int type) throws Exception { String r1, r2; Policy p1, p2; @@ -44,9 +57,9 @@ public class NormalizeTest extends Polic r2 = "normalized" + File.separator + "test" + i + ".xml"; - p1 = getPolicy(r1); + p1 = getPolicy(r1, type); p1 = (Policy) p1.normalize(true); - p2 = getPolicy(r2); + p2 = getPolicy(r2, type); if (!PolicyComparator.compare(p1, p2)) { XMLStreamWriter writer; Modified: webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/PolicyTestCase.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/PolicyTestCase.java?rev=1068627&r1=1068626&r2=1068627&view=diff ============================================================================== --- webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/PolicyTestCase.java (original) +++ webservices/commons/trunk/modules/neethi/src/test/java/org/apache/neethi/PolicyTestCase.java Tue Feb 8 22:24:36 2011 @@ -22,9 +22,20 @@ package org.apache.neethi; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +import org.w3c.dom.Element; + +import org.xml.sax.SAXException; import junit.framework.TestCase; @@ -45,34 +56,58 @@ public abstract class PolicyTestCase ext } } - public Policy getPolicy(String name) { - return PolicyEngine.getPolicy(getResourceAsElement(name)); + public Policy getPolicy(String name) throws Exception { + return getPolicy(name, 3); + } + public Policy getPolicy(String name, int type) throws Exception { + switch (type) { + case 0: + return PolicyEngine.getPolicy(getResource(name)); + case 1: + return PolicyEngine.getPolicy(getResourceAsDOM(name)); + case 2: + return PolicyEngine.getPolicy(getResourceAsStax(name)); + default: + return PolicyEngine.getPolicy(getResourceAsElement(name)); + } } - public InputStream getResource(String name) { + public InputStream getResource(String name) throws FileNotFoundException { String filePath = new File(testResourceDir, name).getAbsolutePath(); + return new FileInputStream(filePath); + } + public Element getResourceAsDOM(String name) + throws ParserConfigurationException, SAXException, IOException { + InputStream in = getResource(name); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + dbf.setValidating(false); + dbf.setIgnoringComments(false); + dbf.setIgnoringElementContentWhitespace(true); + dbf.setNamespaceAware(true); + // dbf.setCoalescing(true); + // dbf.setExpandEntityReferences(true); - try { - FileInputStream fis = new FileInputStream(filePath); - return fis; - } catch (FileNotFoundException e) { - fail("Cannot get resource: " + e.getMessage()); - throw new RuntimeException(); - } + DocumentBuilder db = null; + db = dbf.newDocumentBuilder(); + + // db.setErrorHandler( new MyErrorHandler()); + + return db.parse(in).getDocumentElement(); } - public OMElement getResourceAsElement(String name) { - try { - InputStream in = getResource(name); - OMElement element = OMXMLBuilderFactory.createStAXOMBuilder( - OMAbstractFactory.getOMFactory(), - XMLInputFactory.newInstance().createXMLStreamReader(in)).getDocumentElement(); - return element; - - } catch (Exception e) { - fail("Cannot get resource: " + e.getMessage()); - throw new RuntimeException(); - } + public XMLStreamReader getResourceAsStax(String name) + throws XMLStreamException, FactoryConfigurationError, FileNotFoundException { + InputStream in = getResource(name); + return XMLInputFactory.newInstance().createXMLStreamReader(in); + } + public OMElement getResourceAsElement(String name) + throws XMLStreamException, FactoryConfigurationError, FileNotFoundException { + InputStream in = getResource(name); + OMElement element = OMXMLBuilderFactory.createStAXOMBuilder( + OMAbstractFactory.getOMFactory(), + XMLInputFactory.newInstance().createXMLStreamReader(in)).getDocumentElement(); + return element; } }
