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 2016/02/22 21:51:51 UTC
svn commit: r1731737 - in /webservices/axiom/trunk/aspects:
core-aspects/src/main/java/org/apache/axiom/core/stream/
om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/
om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/p...
Author: veithen
Date: Mon Feb 22 20:51:51 2016
New Revision: 1731737
URL: http://svn.apache.org/viewvc?rev=1731737&view=rev
Log:
Unify the namespace repairing logic and only look up namespace bindings from XMLStreamWriter if necessary.
Added:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java (with props)
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/XMLStreamWriterNamespaceContextProvider.java
- copied, changed from r1731722, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
Removed:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/NamespaceHelper.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java
Modified:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceRepairingFilterHandler.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
Added: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java?rev=1731737&view=auto
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java (added)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java Mon Feb 22 20:51:51 2016
@@ -0,0 +1,23 @@
+/*
+ * 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.axiom.core.stream;
+
+public interface NamespaceContextProvider {
+ boolean isBound(String prefix, String namespaceURI) throws StreamException;
+}
Propchange: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceContextProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceRepairingFilterHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceRepairingFilterHandler.java?rev=1731737&r1=1731736&r2=1731737&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceRepairingFilterHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceRepairingFilterHandler.java Mon Feb 22 20:51:51 2016
@@ -21,28 +21,19 @@ package org.apache.axiom.core.stream;
import javax.xml.XMLConstants;
public final class NamespaceRepairingFilterHandler extends XmlHandlerWrapper {
+ private final NamespaceContextProvider parentNamespaceContext;
+ private final boolean removeRedundantDeclarations;
private String[] namespaceStack = new String[32];
private int bindings;
private int[] scopeStack = new int[8];
private int scopes;
- public NamespaceRepairingFilterHandler(XmlHandler parent) {
+ public NamespaceRepairingFilterHandler(XmlHandler parent, NamespaceContextProvider parentNamespaceContext, boolean removeRedundantDeclarations) {
super(parent);
+ this.parentNamespaceContext = parentNamespaceContext;
+ this.removeRedundantDeclarations = removeRedundantDeclarations;
}
- private boolean isBound(String prefix, String namespaceURI) {
- if (prefix.equals(XMLConstants.XML_NS_PREFIX) && namespaceURI.equals(XMLConstants.XML_NS_URI)) {
- return true;
- } else {
- for (int i=(bindings-1)*2; i>=0; i-=2) {
- if (prefix.equals(namespaceStack[i])) {
- return namespaceURI.equals(namespaceStack[i+1]);
- }
- }
- return prefix.length() == 0 && namespaceURI.length() == 0;
- }
- }
-
private void setPrefix(String prefix, String namespaceURI) {
if (bindings*2 == namespaceStack.length) {
int len = namespaceStack.length;
@@ -56,7 +47,27 @@ public final class NamespaceRepairingFil
}
private void ensureNamespaceDeclared(String prefix, String namespaceURI) throws StreamException {
- if (!isBound(prefix, namespaceURI)) {
+ if (prefix.equals(XMLConstants.XML_NS_PREFIX) && namespaceURI.equals(XMLConstants.XML_NS_URI)) {
+ return;
+ }
+ boolean prefixFound = false;
+ for (int i=(bindings-1)*2; i>=0; i-=2) {
+ if (prefix.equals(namespaceStack[i])) {
+ if (namespaceURI.equals(namespaceStack[i+1])) {
+ return;
+ } else {
+ prefixFound = true;
+ break;
+ }
+ }
+ }
+ if (!prefixFound && parentNamespaceContext != null) {
+ if (!parentNamespaceContext.isBound(prefix, namespaceURI)) {
+ super.processNamespaceDeclaration(prefix, namespaceURI);
+ }
+ // Always call setPrefix even if the namespace is bound, so that we cache the lookup
+ setPrefix(prefix, namespaceURI);
+ } else if (prefixFound || !prefix.isEmpty() || !namespaceURI.isEmpty()) {
super.processNamespaceDeclaration(prefix, namespaceURI);
setPrefix(prefix, namespaceURI);
}
@@ -86,17 +97,21 @@ public final class NamespaceRepairingFil
}
public void processNamespaceDeclaration(String prefix, String namespaceURI) throws StreamException {
- for (int i = scopeStack[scopes-1]; i < bindings; i++) {
- if (namespaceStack[i*2].equals(prefix)) {
- if (namespaceStack[i*2+1].equals(namespaceURI)) {
- return;
- } else {
- // TODO: this causes a failure in the FOM tests
+ if (removeRedundantDeclarations) {
+ ensureNamespaceDeclared(prefix, namespaceURI);
+ } else {
+ for (int i = scopeStack[scopes-1]; i < bindings; i++) {
+ if (namespaceStack[i*2].equals(prefix)) {
+ if (namespaceStack[i*2+1].equals(namespaceURI)) {
+ return;
+ } else {
+ // TODO: this causes a failure in the FOM tests
// throw new OMException("The same prefix cannot be bound to two different namespaces");
+ }
}
}
+ super.processNamespaceDeclaration(prefix, namespaceURI);
+ setPrefix(prefix, namespaceURI);
}
- super.processNamespaceDeclaration(prefix, namespaceURI);
- setPrefix(prefix, namespaceURI);
}
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java?rev=1731737&r1=1731736&r2=1731737&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/AbstractBuilder.java Mon Feb 22 20:51:51 2016
@@ -33,7 +33,7 @@ public abstract class AbstractBuilder im
public AbstractBuilder(NodeFactory nodeFactory, Model model, AxiomSourcedElement root, boolean repairNamespaces) {
builderHandler = new BuilderHandler(nodeFactory, model, root, this);
- handler = repairNamespaces ? new NamespaceRepairingFilterHandler(builderHandler) : builderHandler;
+ handler = repairNamespaces ? new NamespaceRepairingFilterHandler(builderHandler, null, false) : builderHandler;
}
public final void addListener(BuilderListener listener) {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java?rev=1731737&r1=1731736&r2=1731737&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java Mon Feb 22 20:51:51 2016
@@ -21,22 +21,16 @@ package org.apache.axiom.om.impl.common.
import java.io.IOException;
import org.apache.axiom.core.stream.StreamException;
+import org.apache.axiom.core.stream.XmlHandler;
import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.impl.common.serializer.push.SerializerImpl;
import org.apache.axiom.om.impl.intf.TextContent;
import org.apache.axiom.util.stax.XMLStreamWriterUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import javax.xml.namespace.NamespaceContext;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-public class StAXSerializer extends SerializerImpl {
- private static final Log log = LogFactory.getLog(StAXSerializer.class);
-
+public class StAXSerializer implements XmlHandler {
private final XMLStreamWriter writer;
private DataHandlerWriter dataHandlerWriter;
@@ -102,87 +96,6 @@ public class StAXSerializer extends Seri
// Nothing to do here
}
- /**
- * @param prefix
- * @param namespace
- * @return true if the prefix is associated with the namespace in the current context
- */
- protected boolean isAssociated(String prefix, String namespace) throws StreamException {
- try {
- // The "xml" prefix is always (implicitly) associated. Returning true here makes sure that
- // we never write a declaration for the xml namespace. See AXIOM-37 for a discussion
- // of this issue.
- if ("xml".equals(prefix)) {
- return true;
- }
-
- // NOTE: Calling getNamespaceContext() on many XMLStreamWriter implementations is expensive.
- // Please use other writer methods first.
-
- // For consistency, convert null arguments.
- // This helps get around the parser implementation differences.
- // In addition, the getPrefix/getNamespace methods cannot be called with null parameters.
- prefix = (prefix == null) ? "" : prefix;
- namespace = (namespace == null) ? "" : namespace;
-
- if (namespace.length() > 0) {
- // QUALIFIED NAMESPACE
- // Get the namespace associated with the prefix
- String writerPrefix = writer.getPrefix(namespace);
- if (prefix.equals(writerPrefix)) {
- return true;
- }
-
- // It is possible that the namespace is associated with multiple prefixes,
- // So try getting the namespace as a second step.
- if (writerPrefix != null) {
- NamespaceContext nsContext = writer.getNamespaceContext();
- if(nsContext != null) {
- String writerNS = nsContext.getNamespaceURI(prefix);
- return namespace.equals(writerNS);
- }
- }
- return false;
- } else {
- // UNQUALIFIED NAMESPACE
-
- // Neither XML 1.0 nor XML 1.1 allow to associate a prefix with an unqualified name (see also AXIOM-372).
- if (prefix.length() > 0) {
- throw new OMException("Invalid namespace declaration: Prefixed namespace bindings may not be empty.");
- }
-
- // Get the namespace associated with the prefix.
- // It is illegal to call getPrefix with null, but the specification is not
- // clear on what happens if called with "". So the following code is
- // protected
- try {
- String writerPrefix = writer.getPrefix("");
- if (writerPrefix != null && writerPrefix.length() == 0) {
- return true;
- }
- } catch (Throwable t) {
- if (log.isDebugEnabled()) {
- log.debug("Caught exception from getPrefix(\"\"). Processing continues: " + t);
- }
- }
-
-
-
- // Fallback to using the namespace context
- NamespaceContext nsContext = writer.getNamespaceContext();
- if (nsContext != null) {
- String writerNS = nsContext.getNamespaceURI("");
- if (writerNS != null && writerNS.length() > 0) {
- return false;
- }
- }
- return true;
- }
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
public void endElement() throws StreamException {
try {
writer.writeEndElement();
Copied: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/XMLStreamWriterNamespaceContextProvider.java (from r1731722, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/XMLStreamWriterNamespaceContextProvider.java?p2=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/XMLStreamWriterNamespaceContextProvider.java&p1=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java&r1=1731722&r2=1731737&rev=1731737&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/XMLStreamWriterNamespaceContextProvider.java Mon Feb 22 20:51:51 2016
@@ -18,15 +18,9 @@
*/
package org.apache.axiom.om.impl.common.serializer.push.stax;
-import java.io.IOException;
-
+import org.apache.axiom.core.stream.NamespaceContextProvider;
import org.apache.axiom.core.stream.StreamException;
-import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
-import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.impl.common.serializer.push.SerializerImpl;
-import org.apache.axiom.om.impl.intf.TextContent;
-import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,80 +28,21 @@ import javax.xml.namespace.NamespaceCont
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-public class StAXSerializer extends SerializerImpl {
- private static final Log log = LogFactory.getLog(StAXSerializer.class);
+public class XMLStreamWriterNamespaceContextProvider implements NamespaceContextProvider {
+ private static final Log log = LogFactory.getLog(XMLStreamWriterNamespaceContextProvider.class);
private final XMLStreamWriter writer;
- private DataHandlerWriter dataHandlerWriter;
- public StAXSerializer(XMLStreamWriter writer) {
+ public XMLStreamWriterNamespaceContextProvider(XMLStreamWriter writer) {
this.writer = writer;
}
- public XMLStreamWriter getWriter() {
- return writer;
- }
-
- @Override
- public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding,
- boolean standalone) throws StreamException {
- try {
- if (xmlEncoding == null) {
- writer.writeStartDocument(xmlVersion);
- } else {
- writer.writeStartDocument(xmlEncoding, xmlVersion);
- }
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processDocumentTypeDeclaration(String rootName, String publicId, String systemId, String internalSubset) throws StreamException {
- try {
- XMLStreamWriterUtils.writeDTD(writer, rootName, publicId, systemId, internalSubset);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void startElement(String namespaceURI, String localName, String prefix) throws StreamException {
- try {
- writer.writeStartElement(prefix, localName, namespaceURI);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processNamespaceDeclaration(String prefix, String namespaceURI) throws StreamException {
- try {
- if (prefix.length() != 0) {
- writer.writeNamespace(prefix, namespaceURI);
- } else {
- writer.writeDefaultNamespace(namespaceURI);
- }
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processAttribute(String namespaceURI, String localName, String prefix, String value, String type, boolean specified) throws StreamException {
- try {
- writer.writeAttribute(prefix, namespaceURI, localName, value);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void attributesCompleted() throws StreamException {
- // Nothing to do here
- }
-
/**
* @param prefix
* @param namespace
* @return true if the prefix is associated with the namespace in the current context
*/
- protected boolean isAssociated(String prefix, String namespace) throws StreamException {
+ public boolean isBound(String prefix, String namespace) throws StreamException {
try {
// The "xml" prefix is always (implicitly) associated. Returning true here makes sure that
// we never write a declaration for the xml namespace. See AXIOM-37 for a discussion
@@ -182,79 +117,4 @@ public class StAXSerializer extends Seri
throw new StreamException(ex);
}
}
-
- public void endElement() throws StreamException {
- try {
- writer.writeEndElement();
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processCharacterData(Object data, boolean ignorable) throws StreamException {
- try {
- if (data instanceof TextContent) {
- TextContent textContent = (TextContent)data;
- if (textContent.isBinary()) {
- Object dataHandlerObject = textContent.getDataHandlerObject();
- if (dataHandlerObject instanceof DataHandlerProvider) {
- getDataHandlerWriter().writeDataHandler((DataHandlerProvider)dataHandlerObject, textContent.getContentID(), textContent.isOptimize());
- } else {
- getDataHandlerWriter().writeDataHandler(textContent.getDataHandler(), textContent.getContentID(), textContent.isOptimize());
- }
- return;
- }
- }
- writer.writeCharacters(data.toString());
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- } catch (IOException ex) {
- throw new StreamException(ex);
- }
- }
-
- @Override
- public void processCDATASection(String content) throws StreamException {
- try {
- writer.writeCData(content);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processComment(String data) throws StreamException {
- try {
- writer.writeComment(data);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processProcessingInstruction(String target, String data) throws StreamException {
- try {
- writer.writeProcessingInstruction(target, data);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- public void processEntityReference(String name, String replacementText) throws StreamException {
- try {
- writer.writeEntityRef(name);
- } catch (XMLStreamException ex) {
- throw new StreamException(ex);
- }
- }
-
- private DataHandlerWriter getDataHandlerWriter() {
- // We only retrieve/create the DataHandlerWriter if necessary
- if (dataHandlerWriter == null) {
- dataHandlerWriter = XMLStreamWriterUtils.getDataHandlerWriter(writer);
- }
- return dataHandlerWriter;
- }
-
- public void endDocument() throws StreamException {
- // TODO: the original StAX serialization code newer called writeEndDocument; this is probably a mistake
- }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj?rev=1731737&r1=1731736&r2=1731737&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj Mon Feb 22 20:51:51 2016
@@ -37,6 +37,7 @@ import org.apache.axiom.core.CoreNSAware
import org.apache.axiom.core.CoreNode;
import org.apache.axiom.core.ElementMatcher;
import org.apache.axiom.core.Mapper;
+import org.apache.axiom.core.stream.NamespaceRepairingFilterHandler;
import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
import org.apache.axiom.core.stream.sax.XmlHandlerContentHandler;
@@ -59,10 +60,10 @@ import org.apache.axiom.om.impl.common.S
import org.apache.axiom.om.impl.common.builder.StAXHelper;
import org.apache.axiom.om.impl.common.serializer.pull.OMXMLStreamReaderExAdapter;
import org.apache.axiom.om.impl.common.serializer.pull.PullSerializer;
-import org.apache.axiom.om.impl.common.serializer.push.NamespaceHelper;
import org.apache.axiom.om.impl.common.serializer.push.XsiTypeFilterHandler;
import org.apache.axiom.om.impl.common.serializer.push.sax.XMLReaderImpl;
import org.apache.axiom.om.impl.common.serializer.push.stax.StAXSerializer;
+import org.apache.axiom.om.impl.common.serializer.push.stax.XMLStreamWriterNamespaceContextProvider;
import org.apache.axiom.om.impl.intf.AxiomChildNode;
import org.apache.axiom.om.impl.intf.AxiomContainer;
import org.apache.axiom.om.impl.intf.OMFactoryEx;
@@ -266,14 +267,16 @@ public aspect AxiomContainerSupport {
return result;
}
- private XmlHandler AxiomContainer.createSerializer(XMLStreamWriter writer) {
+ private XmlHandler AxiomContainer.createSerializer(XMLStreamWriter writer, boolean useExistingNamespaceContext) {
StAXSerializer serializer = new StAXSerializer(writer);
XmlHandler handler = serializer;
CoreElement contextElement = getContextElement();
if (contextElement != null) {
handler = new XsiTypeFilterHandler(handler, contextElement);
}
- return new NamespaceHelper(serializer, handler);
+ return new NamespaceRepairingFilterHandler(handler,
+ useExistingNamespaceContext ? new XMLStreamWriterNamespaceContextProvider(writer) : null,
+ true);
}
public abstract CoreElement AxiomContainer.getContextElement();
@@ -284,7 +287,7 @@ public aspect AxiomContainerSupport {
(MTOMXMLStreamWriter) xmlWriter :
new MTOMXMLStreamWriter(xmlWriter);
try {
- internalSerialize(createSerializer(writer), writer.getOutputFormat(), cache);
+ internalSerialize(createSerializer(writer, true), writer.getOutputFormat(), cache);
} catch (StreamException ex) {
throw AxiomExceptionTranslator.toXMLStreamException(ex);
}
@@ -321,7 +324,7 @@ public aspect AxiomContainerSupport {
MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format, true);
try {
try {
- internalSerialize(createSerializer(writer), format, true);
+ internalSerialize(createSerializer(writer, false), format, true);
} catch (StreamException ex) {
throw AxiomExceptionTranslator.toXMLStreamException(ex);
}
@@ -336,7 +339,7 @@ public aspect AxiomContainerSupport {
writer.setOutputFormat(format);
try {
try {
- internalSerialize(createSerializer(writer), format, true);
+ internalSerialize(createSerializer(writer, false), format, true);
} catch (StreamException ex) {
throw AxiomExceptionTranslator.toXMLStreamException(ex);
}
@@ -350,7 +353,7 @@ public aspect AxiomContainerSupport {
MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format, false);
try {
try {
- internalSerialize(createSerializer(writer), format, false);
+ internalSerialize(createSerializer(writer, false), format, false);
} catch (StreamException ex) {
throw AxiomExceptionTranslator.toXMLStreamException(ex);
}
@@ -366,7 +369,7 @@ public aspect AxiomContainerSupport {
writer.setOutputFormat(format);
try {
try {
- internalSerialize(createSerializer(writer), format, false);
+ internalSerialize(createSerializer(writer, false), format, false);
} catch (StreamException ex) {
throw AxiomExceptionTranslator.toXMLStreamException(ex);
}