You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2013/05/11 13:20:27 UTC
svn commit: r1481294 - in /webservices/axiom/trunk/modules:
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/
axiom-common-impl/src/main...
Author: veithen
Date: Sat May 11 11:20:27 2013
New Revision: 1481294
URL: http://svn.apache.org/r1481294
Log:
Ensure that the SAXSource returned by getSAXSource has the same behavior as OMSource.
Modified:
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransform.java
webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransformOnFragment.java
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java Sat May 11 11:20:27 2013
@@ -18,7 +18,9 @@
*/
package org.apache.axiom.om.impl.common.serializer.push;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
import javax.activation.DataHandler;
import javax.xml.stream.XMLStreamException;
@@ -49,12 +51,28 @@ public abstract class Serializer {
private static final String XSI_URI = "http://www.w3.org/2001/XMLSchema-instance";
private static final String XSI_LOCAL_NAME = "type";
+ private final OMSerializable root;
private final OMElement contextElement;
private final boolean namespaceRepairing;
+ private final boolean preserveNamespaceContext;
- public Serializer(OMSerializable contextNode, boolean namespaceRepairing) {
- if (contextNode instanceof OMNode) {
- OMContainer parent = ((OMNode)contextNode).getParent();
+ /**
+ * Constructor.
+ *
+ * @param root
+ * the root node of the object model subtree that is being serialized; this
+ * information is used by the serializer in scenarios that require access to the
+ * namespace context of the parent of the root node
+ * @param namespaceRepairing
+ * indicates if the serializer should perform namespace repairing
+ * @param preserveNamespaceContext
+ * indicates if the namespace context determined by the ancestors of the root node
+ * should be strictly preserved in the output
+ */
+ public Serializer(OMSerializable root, boolean namespaceRepairing, boolean preserveNamespaceContext) {
+ this.root = root;
+ if (root instanceof OMNode) {
+ OMContainer parent = ((OMNode)root).getParent();
if (parent instanceof OMElement) {
contextElement = (OMElement)parent;
} else {
@@ -64,6 +82,7 @@ public abstract class Serializer {
contextElement = null;
}
this.namespaceRepairing = namespaceRepairing;
+ this.preserveNamespaceContext = preserveNamespaceContext;
}
public final void serializeStartpart(OMElement element) throws OutputException {
@@ -73,9 +92,30 @@ public abstract class Serializer {
} else {
internalBeginStartElement(ns.getPrefix(), ns.getNamespaceURI(), element.getLocalName());
}
- for (Iterator it = element.getAllDeclaredNamespaces(); it.hasNext(); ) {
- ns = (OMNamespace)it.next();
- mapNamespace(ns.getPrefix(), ns.getNamespaceURI(), true, false);
+ if (preserveNamespaceContext && element == root) {
+ // Maintain a set of the prefixes we have already seen. This is required to take into
+ // account that a namespace mapping declared on an element can hide another one declared
+ // for the same prefix on an ancestor of the element.
+ Set/*<String>*/ seenPrefixes = new HashSet();
+ OMElement current = element;
+ while (true) {
+ for (Iterator it = current.getAllDeclaredNamespaces(); it.hasNext(); ) {
+ ns = (OMNamespace)it.next();
+ if (seenPrefixes.add(ns.getPrefix())) {
+ mapNamespace(ns.getPrefix(), ns.getNamespaceURI(), true, false);
+ }
+ }
+ OMContainer parent = current.getParent();
+ if (!(parent instanceof OMElement)) {
+ break;
+ }
+ current = (OMElement)parent;
+ }
+ } else {
+ for (Iterator it = element.getAllDeclaredNamespaces(); it.hasNext(); ) {
+ ns = (OMNamespace)it.next();
+ mapNamespace(ns.getPrefix(), ns.getNamespaceURI(), true, false);
+ }
}
for (Iterator it = element.getAllAttributes(); it.hasNext(); ) {
OMAttribute attr = (OMAttribute)it.next();
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java Sat May 11 11:20:27 2013
@@ -45,8 +45,8 @@ public class SAXSerializer extends Seria
private int depth;
private final SAXHelper helper = new SAXHelper();
- public SAXSerializer(OMSerializable contextNode, ContentHandler contentHandler, LexicalHandler lexicalHandler) {
- super(contextNode, false);
+ public SAXSerializer(OMSerializable root, ContentHandler contentHandler, LexicalHandler lexicalHandler) {
+ super(root, false, true);
this.contentHandler = contentHandler;
this.lexicalHandler = lexicalHandler;
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java Sat May 11 11:20:27 2013
@@ -43,8 +43,8 @@ public class StAXSerializer extends Seri
private final XMLStreamWriter writer;
private DataHandlerWriter dataHandlerWriter;
- public StAXSerializer(OMSerializable contextNode, XMLStreamWriter writer) {
- super(contextNode, true);
+ public StAXSerializer(OMSerializable root, XMLStreamWriter writer) {
+ super(root, true, false);
this.writer = writer;
}
Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java Sat May 11 11:20:27 2013
@@ -261,8 +261,10 @@ public class OMTestSuiteBuilder extends
addTest(new org.apache.axiom.ts.om.element.TestGetQNameWithoutNamespace(metaFactory));
for (int i=0; i<XSLTImplementation.INSTANCES.length; i++) {
XSLTImplementation xsltImplementation = XSLTImplementation.INSTANCES[i];
- addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransform(metaFactory, xsltImplementation));
- addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransformOnFragment(metaFactory, xsltImplementation));
+ addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransform(metaFactory, xsltImplementation, true));
+ addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransform(metaFactory, xsltImplementation, false));
+ addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransformOnFragment(metaFactory, xsltImplementation, true));
+ addTest(new org.apache.axiom.ts.om.element.TestGetSAXSourceIdentityTransformOnFragment(metaFactory, xsltImplementation, false));
}
addTest(new org.apache.axiom.ts.om.element.TestGetText(metaFactory));
addTest(new org.apache.axiom.ts.om.element.TestGetTextAsQName(metaFactory));
Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransform.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransform.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransform.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransform.java Sat May 11 11:20:27 2013
@@ -33,17 +33,19 @@ import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMMetaFactory;
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.impl.jaxp.OMResult;
-import org.apache.axiom.om.impl.jaxp.OMSource;
import org.apache.axiom.testutils.suite.XSLTImplementation;
import org.apache.axiom.ts.AxiomTestCase;
public class TestGetSAXSourceIdentityTransform extends AxiomTestCase {
private final XSLTImplementation xsltImplementation;
+ private final boolean cache;
- public TestGetSAXSourceIdentityTransform(OMMetaFactory metaFactory, XSLTImplementation xsltImplementation) {
+ public TestGetSAXSourceIdentityTransform(OMMetaFactory metaFactory, XSLTImplementation xsltImplementation, boolean cache) {
super(metaFactory);
this.xsltImplementation = xsltImplementation;
+ this.cache = cache;
xsltImplementation.addTestParameters(this);
+ addTestParameter("cache", String.valueOf(cache));
}
private InputStream getInput() {
@@ -55,9 +57,8 @@ public class TestGetSAXSourceIdentityTra
OMFactory factory = metaFactory.getOMFactory();
OMElement element = OMXMLBuilderFactory.createOMBuilder(factory, getInput()).getDocumentElement();
- OMSource omSource = new OMSource(element);
OMResult omResult = new OMResult(factory);
- transformer.transform(omSource, omResult);
+ transformer.transform(element.getSAXSource(cache), omResult);
StreamSource streamSource = new StreamSource(getInput());
StringWriter out = new StringWriter();
Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransformOnFragment.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransformOnFragment.java?rev=1481294&r1=1481293&r2=1481294&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransformOnFragment.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetSAXSourceIdentityTransformOnFragment.java Sat May 11 11:20:27 2013
@@ -51,11 +51,14 @@ import org.apache.axiom.ts.AxiomTestCase
*/
public class TestGetSAXSourceIdentityTransformOnFragment extends AxiomTestCase {
private final XSLTImplementation xsltImplementation;
+ private final boolean cache;
- public TestGetSAXSourceIdentityTransformOnFragment(OMMetaFactory metaFactory, XSLTImplementation xsltImplementation) {
+ public TestGetSAXSourceIdentityTransformOnFragment(OMMetaFactory metaFactory, XSLTImplementation xsltImplementation, boolean cache) {
super(metaFactory);
this.xsltImplementation = xsltImplementation;
+ this.cache = cache;
xsltImplementation.addTestParameters(this);
+ addTestParameter("cache", String.valueOf(cache));
}
private InputStream getInput() {
@@ -67,9 +70,8 @@ public class TestGetSAXSourceIdentityTra
OMFactory factory = metaFactory.getOMFactory();
OMElement element = OMXMLBuilderFactory.createOMBuilder(factory, getInput()).getDocumentElement().getFirstElement();
- OMSource omSource = new OMSource(element);
OMResult omResult = new OMResult(factory);
- transformer.transform(omSource, omResult);
+ transformer.transform(element.getSAXSource(cache), omResult);
OMNamespace ns = omResult.getRootElement().findNamespaceURI("p");
assertNotNull(ns);