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/27 18:42:21 UTC
svn commit: r1732654 - in /webservices/axiom/trunk:
aspects/core-aspects/src/main/java/org/apache/axiom/core/
aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/
aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/ aspects/...
Author: veithen
Date: Sat Feb 27 17:42:21 2016
New Revision: 1732654
URL: http://svn.apache.org/viewvc?rev=1732654&view=rev
Log:
Correctly support processing of large CDATA sections.
Added:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java (with props)
webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml (with props)
webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml (with props)
Modified:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASection.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataContainingParentNode.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreComment.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstruction.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCDATASectionSupport.aj
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreDocumentSupport.aj
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.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/intf/TextContent.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomCDATASectionSupport.aj
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java
webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox4Dialect.java
webservices/axiom/trunk/testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/StAXXML.java
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java Sat Feb 27 17:42:21 2016
@@ -29,4 +29,5 @@ public interface CharacterData {
<T> CharacterData clone(ClonePolicy<T> policy, T options);
String toString();
void writeTo(Writer writer) throws IOException;
+ void appendTo(StringBuilder buffer);
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASection.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASection.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASection.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASection.java Sat Feb 27 17:42:21 2016
@@ -18,6 +18,6 @@
*/
package org.apache.axiom.core;
-public interface CoreCDATASection extends CoreChildNode, CoreCharacterDataContainingParentNode {
+public interface CoreCDATASection extends CoreChildNode, CoreCharacterDataContainingParentNode, DeferringParentNode {
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataContainingParentNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataContainingParentNode.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataContainingParentNode.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataContainingParentNode.java Sat Feb 27 17:42:21 2016
@@ -18,6 +18,6 @@
*/
package org.apache.axiom.core;
-public interface CoreCharacterDataContainingParentNode extends CoreCharacterDataContainer, NonDeferringParentNode {
+public interface CoreCharacterDataContainingParentNode extends CoreCharacterDataContainer, CoreParentNode {
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreComment.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreComment.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreComment.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreComment.java Sat Feb 27 17:42:21 2016
@@ -18,6 +18,6 @@
*/
package org.apache.axiom.core;
-public interface CoreComment extends CoreChildNode, CoreCharacterDataContainingParentNode {
+public interface CoreComment extends CoreChildNode, CoreCharacterDataContainingParentNode, NonDeferringParentNode {
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstruction.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstruction.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstruction.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstruction.java Sat Feb 27 17:42:21 2016
@@ -18,6 +18,6 @@
*/
package org.apache.axiom.core;
-public interface CoreProcessingInstruction extends CoreChildNode, CoreCharacterDataContainingParentNode {
+public interface CoreProcessingInstruction extends CoreChildNode, CoreCharacterDataContainingParentNode, NonDeferringParentNode {
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCDATASectionSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCDATASectionSupport.aj?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCDATASectionSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreCDATASectionSupport.aj Sat Feb 27 17:42:21 2016
@@ -34,7 +34,11 @@ public aspect CoreCDATASectionSupport {
public final <T> void CoreCDATASection.init(ClonePolicy<T> policy, T options, CoreNode other) {
}
- public final void CoreCDATASection.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
- handler.processCDATASection(coreGetCharacterData().toString());
+ final void CoreCDATASection.serializeStartEvent(XmlHandler handler) throws CoreModelException, StreamException {
+ handler.startCDATASection();
+ }
+
+ final void CoreCDATASection.serializeEndEvent(XmlHandler handler) throws StreamException {
+ handler.endCDATASection();
}
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreDocumentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreDocumentSupport.aj?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreDocumentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreDocumentSupport.aj Sat Feb 27 17:42:21 2016
@@ -99,9 +99,11 @@ public aspect CoreDocumentSupport {
coreSetInputEncoding(o.coreGetInputEncoding());
}
- public final void CoreDocument.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
+ final void CoreDocument.serializeStartEvent(XmlHandler handler) throws CoreModelException, StreamException {
handler.startDocument(coreGetInputEncoding(), coreGetXmlVersion(), coreGetXmlEncoding(), coreIsStandalone());
- serializeChildren(handler, cache);
+ }
+
+ final void CoreDocument.serializeEndEvent(XmlHandler handler) throws StreamException {
handler.endDocument();
}
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj Sat Feb 27 17:42:21 2016
@@ -344,6 +344,20 @@ public aspect CoreParentNodeSupport {
}
}
+ void CoreParentNode.serializeStartEvent(XmlHandler handler) throws CoreModelException, StreamException {
+ throw new UnsupportedOperationException();
+ }
+
+ void CoreParentNode.serializeEndEvent(XmlHandler handler) throws StreamException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void CoreParentNode.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
+ serializeStartEvent(handler);
+ serializeChildren(handler, cache);
+ serializeEndEvent(handler);
+ }
+
public final void CoreParentNode.serializeChildren(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
if (getState() == DISCARDED) {
Builder builder = coreGetBuilder();
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandler.java Sat Feb 27 17:42:21 2016
@@ -80,7 +80,21 @@ public interface XmlHandler {
void processComment(String content) throws StreamException;
- void processCDATASection(String content) throws StreamException;
+ /**
+ * Notify the handler of the beginning of a CDATA section.
+ *
+ * @throws StreamException
+ * if an error occurs when processing the event
+ */
+ void startCDATASection() throws StreamException;
+
+ /**
+ * Notify the handler of the end of a CDATA section.
+ *
+ * @throws StreamException
+ * if an error occurs when processing the event
+ */
+ void endCDATASection() throws StreamException;
void processEntityReference(String name, String replacementText) throws StreamException;
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlHandlerWrapper.java Sat Feb 27 17:42:21 2016
@@ -79,8 +79,12 @@ public class XmlHandlerWrapper implement
parent.processComment(content);
}
- public void processCDATASection(String content) throws StreamException {
- parent.processCDATASection(content);
+ public void startCDATASection() throws StreamException {
+ parent.startCDATASection();
+ }
+
+ public void endCDATASection() throws StreamException {
+ parent.endCDATASection();
}
public void processEntityReference(String name, String replacementText) throws StreamException {
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/ContentHandlerXmlHandler.java Sat Feb 27 17:42:21 2016
@@ -179,13 +179,19 @@ public class ContentHandlerXmlHandler im
}
@Override
- public void processCDATASection(String content) throws StreamException {
+ public void startCDATASection() throws StreamException {
try {
if (lexicalHandler != null) {
lexicalHandler.startCDATA();
}
- char[] ch = content.toCharArray();
- contentHandler.characters(ch, 0, ch.length);
+ } catch (SAXException ex) {
+ throw new StreamException(ex);
+ }
+ }
+
+ @Override
+ public void endCDATASection() throws StreamException {
+ try {
if (lexicalHandler != null) {
lexicalHandler.endCDATA();
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/XmlHandlerContentHandler.java Sat Feb 27 17:42:21 2016
@@ -78,8 +78,6 @@ public final class XmlHandlerContentHand
*/
private int namespaceCount;
- private boolean inCDATASection;
-
private boolean inEntityReference;
private int entityReferenceDepth;
@@ -308,13 +306,21 @@ public final class XmlHandlerContentHand
public void startCDATA() throws SAXException {
if (!inEntityReference) {
- inCDATASection = true;
+ try {
+ handler.startCDATASection();
+ } catch (StreamException ex) {
+ throw toSAXException(ex);
+ }
}
}
public void endCDATA() throws SAXException {
if (!inEntityReference) {
- inCDATASection = false;
+ try {
+ handler.endCDATASection();
+ } catch (StreamException ex) {
+ throw toSAXException(ex);
+ }
}
}
@@ -322,12 +328,7 @@ public final class XmlHandlerContentHand
throws SAXException {
if (!inEntityReference) {
try {
- if (inCDATASection) {
- // TODO: incorrect because it may split CDATA sections
- handler.processCDATASection(new String(ch, start, length));
- } else {
- handler.processCharacterData(new String(ch, start, length), false);
- }
+ handler.processCharacterData(new String(ch, start, length), false);
} catch (StreamException ex) {
throw toSAXException(ex);
}
Added: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java?rev=1732654&view=auto
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java (added)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java Sat Feb 27 17:42:21 2016
@@ -0,0 +1,62 @@
+/*
+ * 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.util;
+
+import org.apache.axiom.core.CharacterData;
+
+public class CharacterDataAccumulator {
+ private Object content;
+
+ public void append(Object data) {
+ if (content == null) {
+ content = data;
+ } else {
+ StringBuilder buffer;
+ if (content instanceof StringBuilder) {
+ buffer = (StringBuilder)content;
+ } else {
+ if (content instanceof CharacterData) {
+ buffer = new StringBuilder();
+ ((CharacterData)content).appendTo(buffer);
+ } else {
+ buffer = new StringBuilder(content.toString());
+ }
+ content = buffer;
+ }
+ if (data instanceof CharacterData) {
+ ((CharacterData)data).appendTo(buffer);
+ } else {
+ buffer.append(data);
+ }
+ }
+ }
+
+ public boolean isEmpty() {
+ return content == null;
+ }
+
+ @Override
+ public String toString() {
+ return content == null ? "" : content.toString();
+ }
+
+ public void clear() {
+ content = null;
+ }
+}
Propchange: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/util/CharacterDataAccumulator.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java Sat Feb 27 17:42:21 2016
@@ -18,7 +18,9 @@
*/
package org.apache.axiom.om.impl.common;
+import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
+import org.apache.axiom.core.stream.util.CharacterDataAccumulator;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMDocument;
@@ -32,12 +34,21 @@ public final class SAXResultContentHand
private final OMContainer root;
private final OMFactory factory;
private OMContainer target;
+ private final CharacterDataAccumulator buffer = new CharacterDataAccumulator();
+ private boolean buffering;
public SAXResultContentHandler(OMContainer root) {
this.root = root;
factory = root.getOMFactory();
}
+ private String stopBuffering() {
+ String content = buffer.toString();
+ buffer.clear();
+ buffering = false;
+ return content;
+ }
+
public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding, boolean standalone) {
target = root;
}
@@ -93,12 +104,21 @@ public final class SAXResultContentHand
@Override
public void processCharacterData(Object data, boolean ignorable) {
- factory.createOMText(target, data.toString(), ignorable ? OMNode.SPACE_NODE : OMNode.TEXT_NODE);
+ if (buffering) {
+ buffer.append(data);
+ } else {
+ factory.createOMText(target, data.toString(), ignorable ? OMNode.SPACE_NODE : OMNode.TEXT_NODE);
+ }
+ }
+
+ @Override
+ public void startCDATASection() throws StreamException {
+ buffering = true;
}
@Override
- public void processCDATASection(String content) {
- factory.createOMText(target, content, OMNode.CDATA_SECTION_NODE);
+ public void endCDATASection() throws StreamException {
+ factory.createOMText(target, stopBuffering(), OMNode.CDATA_SECTION_NODE);
}
public void processProcessingInstruction(String piTarget, String piData) {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java Sat Feb 27 17:42:21 2016
@@ -173,9 +173,15 @@ public final class BuilderHandler implem
context.processComment(content);
}
- public void processCDATASection(String content) throws StreamException {
+ @Override
+ public void startCDATASection() throws StreamException {
model.validateEventType(XMLStreamConstants.CDATA);
- context.processCDATASection(content);
+ context = context.startCDATASection();
+ }
+
+ @Override
+ public void endCDATASection() throws StreamException {
+ context = context.endCDATASection();
}
public void processEntityReference(String name, String replacementText) throws StreamException {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java Sat Feb 27 17:42:21 2016
@@ -19,7 +19,9 @@
package org.apache.axiom.om.impl.common.builder;
import org.apache.axiom.core.Builder;
+import org.apache.axiom.core.CoreCDATASection;
import org.apache.axiom.core.CoreCharacterDataNode;
+import org.apache.axiom.core.CoreChildNode;
import org.apache.axiom.core.CoreParentNode;
import org.apache.axiom.core.InputContext;
import org.apache.axiom.core.stream.StreamException;
@@ -28,9 +30,7 @@ import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.common.AxiomSemantics;
import org.apache.axiom.om.impl.common.OMNamespaceImpl;
import org.apache.axiom.om.impl.intf.AxiomAttribute;
-import org.apache.axiom.om.impl.intf.AxiomCDATASection;
import org.apache.axiom.om.impl.intf.AxiomCharacterDataNode;
-import org.apache.axiom.om.impl.intf.AxiomChildNode;
import org.apache.axiom.om.impl.intf.AxiomComment;
import org.apache.axiom.om.impl.intf.AxiomContainer;
import org.apache.axiom.om.impl.intf.AxiomDocType;
@@ -47,7 +47,7 @@ public final class Context implements In
private final int depth;
private Context nestedContext;
- public AxiomContainer target;
+ public CoreParentNode target;
private Object pendingCharacterData;
@@ -81,7 +81,7 @@ public final class Context implements In
this.passThroughHandler = passThroughHandler;
}
- private Context newContext(AxiomContainer target) {
+ private Context newContext(CoreParentNode target) {
if (nestedContext == null) {
nestedContext = new Context(builderHandler, this, depth+1);
}
@@ -90,6 +90,17 @@ public final class Context implements In
return nestedContext;
}
+ private Context endContext() {
+ target.coreSetState(CoreParentNode.COMPLETE);
+ target.coreSetInputContext(null);
+ if (pendingCharacterData != null) {
+ target.coreSetCharacterData(pendingCharacterData, null);
+ pendingCharacterData = null;
+ }
+ target = null;
+ return parentContext;
+ }
+
private Context decrementPassThroughDepth() {
if (passThroughDepth == 0) {
target.coreSetInputContext(null);
@@ -103,7 +114,7 @@ public final class Context implements In
}
}
- private void addChild(AxiomChildNode node) {
+ private void addChild(CoreChildNode node) {
if (pendingCharacterData != null) {
AxiomCharacterDataNode cdataNode = builderHandler.nodeFactory.createNode(AxiomCharacterDataNode.class);
cdataNode.coreSetCharacterData(pendingCharacterData);
@@ -146,7 +157,7 @@ public final class Context implements In
element = builderHandler.root;
} else {
element = builderHandler.nodeFactory.createNode(builderHandler.model.determineElementType(
- target, depth+1, namespaceURI, localName));
+ (AxiomContainer)target, depth+1, namespaceURI, localName));
element.coreSetState(CoreParentNode.ATTRIBUTES_PENDING);
element.initName(localName, ns, false);
addChild(element);
@@ -163,14 +174,7 @@ public final class Context implements In
}
return decrementPassThroughDepth();
} else {
- target.setComplete(true);
- target.coreSetInputContext(null);
- if (pendingCharacterData != null) {
- target.coreSetCharacterData(pendingCharacterData, null);
- pendingCharacterData = null;
- }
- target = null;
- return parentContext;
+ return endContext();
}
}
@@ -245,13 +249,24 @@ public final class Context implements In
}
}
- public void processCDATASection(String content) throws StreamException {
+ public Context startCDATASection() throws StreamException {
if (passThroughHandler != null) {
- passThroughHandler.processCDATASection(content);
+ passThroughDepth++;
+ passThroughHandler.startCDATASection();
+ return this;
} else {
- AxiomCDATASection node = builderHandler.nodeFactory.createNode(AxiomCDATASection.class);
- node.coreSetCharacterData(content, AxiomSemantics.INSTANCE);
+ CoreCDATASection node = builderHandler.nodeFactory.createNode(CoreCDATASection.class);
addChild(node);
+ return newContext(node);
+ }
+ }
+
+ public Context endCDATASection() throws StreamException {
+ if (passThroughHandler != null) {
+ passThroughHandler.endCDATASection();
+ return decrementPassThroughDepth();
+ } else {
+ return endContext();
}
}
@@ -278,7 +293,7 @@ public final class Context implements In
throw new IllegalStateException();
}
if (target != null) {
- target.setComplete(true);
+ target.coreSetState(CoreParentNode.COMPLETE);
target.coreSetInputContext(null);
}
target = null;
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java Sat Feb 27 17:42:21 2016
@@ -152,7 +152,9 @@ public class StAXHelper implements XmlRe
handler.processCharacterData(text, true);
break;
case XMLStreamConstants.CDATA:
- handler.processCDATASection(text);
+ handler.startCDATASection();
+ handler.processCharacterData(text, false);
+ handler.endCDATASection();
break;
default:
throw new IllegalStateException();
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=1732654&r1=1732653&r2=1732654&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 Sat Feb 27 17:42:21 2016
@@ -22,6 +22,7 @@ import java.io.IOException;
import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
+import org.apache.axiom.core.stream.util.CharacterDataAccumulator;
import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
import org.apache.axiom.om.impl.intf.TextContent;
@@ -33,6 +34,8 @@ import javax.xml.stream.XMLStreamWriter;
public class StAXSerializer implements XmlHandler {
private final XMLStreamWriter writer;
private DataHandlerWriter dataHandlerWriter;
+ private final CharacterDataAccumulator buffer = new CharacterDataAccumulator();
+ private boolean buffering;
public StAXSerializer(XMLStreamWriter writer) {
this.writer = writer;
@@ -42,6 +45,13 @@ public class StAXSerializer implements X
return writer;
}
+ private String stopBuffering() {
+ String content = buffer.toString();
+ buffer.clear();
+ buffering = false;
+ return content;
+ }
+
@Override
public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding,
boolean standalone) throws StreamException {
@@ -105,6 +115,10 @@ public class StAXSerializer implements X
}
public void processCharacterData(Object data, boolean ignorable) throws StreamException {
+ if (buffering) {
+ buffer.append(data);
+ return;
+ }
try {
if (data instanceof TextContent) {
TextContent textContent = (TextContent)data;
@@ -127,9 +141,14 @@ public class StAXSerializer implements X
}
@Override
- public void processCDATASection(String content) throws StreamException {
+ public void startCDATASection() throws StreamException {
+ buffering = true;
+ }
+
+ @Override
+ public void endCDATASection() throws StreamException {
try {
- writer.writeCData(content);
+ writer.writeCData(stopBuffering());
} catch (XMLStreamException ex) {
throw new StreamException(ex);
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/intf/TextContent.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/intf/TextContent.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/intf/TextContent.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/intf/TextContent.java Sat Feb 27 17:42:21 2016
@@ -30,6 +30,7 @@ import org.apache.axiom.ext.stax.datahan
import org.apache.axiom.om.OMCloneOptions;
import org.apache.axiom.om.OMException;
import org.apache.axiom.util.UIDGenerator;
+import org.apache.axiom.util.base64.Base64EncodingStringBufferOutputStream;
import org.apache.axiom.util.base64.Base64EncodingWriterOutputStream;
import org.apache.axiom.util.base64.Base64Utils;
@@ -175,4 +176,19 @@ public final class TextContent implement
writer.write(value);
}
}
+
+ @Override
+ public void appendTo(StringBuilder buffer) {
+ if (binary) {
+ Base64EncodingStringBufferOutputStream out = new Base64EncodingStringBufferOutputStream(buffer);
+ try {
+ getDataHandler().writeTo(out);
+ out.complete();
+ } catch (IOException ex) {
+ throw new OMException(ex);
+ }
+ } else {
+ buffer.append(value);
+ }
+ }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomCDATASectionSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomCDATASectionSupport.aj?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomCDATASectionSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomCDATASectionSupport.aj Sat Feb 27 17:42:21 2016
@@ -38,4 +38,8 @@ public aspect AxiomCDATASectionSupport {
throw AxiomExceptionTranslator.translate(ex);
}
}
+
+ public final void AxiomCDATASection.build() {
+ // TODO
+ }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java Sat Feb 27 17:42:21 2016
@@ -180,7 +180,9 @@ public class XmlHandlerStreamWriter exte
protected void doWriteCData(String data) throws XMLStreamException {
finishStartElement();
try {
- handler.processCDATASection(data);
+ handler.startCDATASection();
+ handler.processCharacterData(data, false);
+ handler.endCDATASection();
} catch (StreamException ex) {
throw toXMLStreamException(ex);
}
Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox4Dialect.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox4Dialect.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox4Dialect.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/util/stax/dialect/Woodstox4Dialect.java Sat Feb 27 17:42:21 2016
@@ -40,8 +40,9 @@ class Woodstox4Dialect extends AbstractS
}
public XMLInputFactory enableCDataReporting(XMLInputFactory factory) {
- // For Woodstox, this is sufficient
factory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
+ factory.setProperty("http://java.sun.com/xml/stream/properties/report-cdata-event", Boolean.TRUE);
+ factory.setProperty("com.ctc.wstx.minTextSegment", Integer.MAX_VALUE);
return factory;
}
Added: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml?rev=1732654&view=auto
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml (added)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml Sat Feb 27 17:42:21 2016
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<root><![CDATA[AB]]><![CDATA[CD]]><![CDATA[EF]]></root>
Propchange: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/adjacent-cdata-sections.xml
------------------------------------------------------------------------------
svn:eol-style = LF
Added: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml?rev=1732654&view=auto
==============================================================================
--- webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml (added)
+++ webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml Sat Feb 27 17:42:21 2016
@@ -0,0 +1,91 @@
+<?xml version="1.0"?>
+<root><![CDATA[
+<0>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<1>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<2>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<3>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<4>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<5>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<6>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+<7>
+#################################################################################################### 0
+#################################################################################################### 1
+#################################################################################################### 2
+#################################################################################################### 3
+#################################################################################################### 4
+#################################################################################################### 5
+#################################################################################################### 6
+#################################################################################################### 7
+#################################################################################################### 8
+#################################################################################################### 9
+]]></root>
Propchange: webservices/axiom/trunk/testing/xml-testsuite/src/main/resources/org/apache/axiom/ts/xml/bulk/large-cdata-section.xml
------------------------------------------------------------------------------
svn:eol-style = LF
Modified: webservices/axiom/trunk/testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/StAXXML.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/StAXXML.java?rev=1732654&r1=1732653&r2=1732654&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/StAXXML.java (original)
+++ webservices/axiom/trunk/testing/xml-truth/src/main/java/org/apache/axiom/truth/xml/StAXXML.java Sat Feb 27 17:42:21 2016
@@ -26,6 +26,7 @@ import org.apache.axiom.truth.xml.spi.Tr
import org.apache.axiom.truth.xml.spi.TraverserException;
import org.apache.axiom.truth.xml.spi.XML;
+import com.ctc.wstx.api.WstxInputProperties;
import com.ctc.wstx.stax.WstxInputFactory;
abstract class StAXXML implements XML {
@@ -41,6 +42,7 @@ abstract class StAXXML implements XML {
factory.setProperty(WstxInputFactory.P_AUTO_CLOSE_INPUT, Boolean.TRUE);
factory.setProperty(WstxInputFactory.P_REPORT_PROLOG_WHITESPACE, Boolean.TRUE);
factory.setProperty(WstxInputFactory.P_REPORT_CDATA, Boolean.TRUE);
+ factory.setProperty(WstxInputProperties.P_MIN_TEXT_SEGMENT, Integer.MAX_VALUE);
try {
return new StAXTraverser(createXMLStreamReader(factory));
} catch (XMLStreamException ex) {