Author: dkulp Date: Mon Jan 19 12:43:08 2009 New Revision: 735799 URL: http://svn.apache.org/viewvc?rev=735799&view=rev Log: Merged revisions 726749 via svnmerge from https://svn.apache.org/repos/asf/cxf/branches/2.1.x-fixes
................ r726749 | dkulp | 2008-12-15 13:04:50 -0500 (Mon, 15 Dec 2008) | 9 lines Merged revisions 726631 via svnmerge from https://svn.apache.org/repos/asf/cxf/trunk ........ r726631 | dkulp | 2008-12-15 02:20:22 -0500 (Mon, 15 Dec 2008) | 2 lines Performance change to streamreader to not use indexes for next nodes for DOM, use getNextSibling. ........ ................ Modified: cxf/branches/2.0.x-fixes/ (props changed) cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/AbstractDOMStreamReader.java cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/stax/JDOMStreamReader.java Propchange: cxf/branches/2.0.x-fixes/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Mon Jan 19 12:43:08 2009 @@ -1,3 +1,3 @@ -/cxf/branches/2.1.x-fixes:673548,674485,674547,674551,674562,674601,674649,674764,674887,675644,675653,677048,677385,678004,678009,678559,678629,678808,678852,678891,678893,679248,679597,680435,681060,681165,681813,681816,682902,682951,683089,683290,683318,684099,684790-684793,684842,684862,684895-684918,685205,685253,686237,686283,686299,686333-686364,686765,686827,687097,687464-687465,689109,689112,689122,691316,691357,691491,691711,691715,691745,692162-692163,692468,692500,694466-694469,694472,694717,694748-694749,694870,695503,695509,695553,695555,695563,695875-695877,695940,695980,696436,696455,696721,697086,698129,701526,701634,702275,702443,702527,702582,702604,702610,702642-702643,702649,702760,702870,702873,702959,703193,703242,703523,704303,704587,704738,704998,705153,705280-705449,705455,709357,709641,709644,710177,710184,711736,712199,712225,712275,712600,712896,713083,713410,713413,713594,713599,713808,713901,714169-714171,718622,718929,719211,719221-719223,7192 96,719300-719301,719303,719308,719332,719356,719363,719369-719383,719650,719695,720124,723545,724403-724404,724421,724448,724451,724486-724487,724714,725367,725371,725763,725774,726045,726048,726106,726123,726745-726746,726754,726756-726758,726995,733587 -/cxf/trunk:651669-686342,686344-686363,686764,686820,687096,687387,687463,688086,688102,688735,691271,691355,691488,691602,691706,691728,692116,692157,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694869,695396,695484,695537,695552,695561,695619,695684,695835,695935,695977,696094,696433,696720,697085,698128,700261,700602,701783,701830,701862,702267,702580,702602,702609,702616,702656,702957,703191,703239,703501,704584,704997,705150,705274,705340,705446,708550,708554,709353-709354,709425,710150,712194,712198,712272,712312,712670,712893,713082,713584,713597,713804,713899,714167-714168,718281,718565,718620,718640,718665,719017,719210,719215-719218,719222,719273,719327-719354,719362,719368,719382,719649,719680,720119-720217,723338,723717-723791,724334-724371,724433-724438,724449,724481,724485,724668,724782,724795,725754,725773,725799,725839,726342,726524,726637,726639,726692,726724,726992,733582 +/cxf/branches/2.1.x-fixes:673548,674485,674547,674551,674562,674601,674649,674764,674887,675644,675653,677048,677385,678004,678009,678559,678629,678808,678852,678891,678893,679248,679597,680435,681060,681165,681813,681816,682902,682951,683089,683290,683318,684099,684790-684793,684842,684862,684895-684918,685205,685253,686237,686283,686299,686333-686364,686765,686827,687097,687464-687465,689109,689112,689122,691316,691357,691491,691711,691715,691745,692162-692163,692468,692500,694466-694469,694472,694717,694748-694749,694870,695503,695509,695553,695555,695563,695875-695877,695940,695980,696436,696455,696721,697086,698129,701526,701634,702275,702443,702527,702582,702604,702610,702642-702643,702649,702760,702870,702873,702959,703193,703242,703523,704303,704587,704738,704998,705153,705280-705449,705455,709357,709641,709644,710177,710184,711736,712199,712225,712275,712600,712896,713083,713410,713413,713594,713599,713808,713901,714169-714171,718622,718929,719211,719221-719223,7192 96,719300-719301,719303,719308,719332,719356,719363,719369-719383,719650,719695,720124,723545,724403-724404,724421,724448,724451,724486-724487,724714,725367,725371,725763,725774,726045,726048,726106,726123,726745-726746,726749,726754,726756-726758,726995,733587 +/cxf/trunk:651669-686342,686344-686363,686764,686820,687096,687387,687463,688086,688102,688735,691271,691355,691488,691602,691706,691728,692116,692157,692466,692499,693653,693819,694179,694263,694417,694716,694744,694747,694869,695396,695484,695537,695552,695561,695619,695684,695835,695935,695977,696094,696433,696720,697085,698128,700261,700602,701783,701830,701862,702267,702580,702602,702609,702616,702656,702957,703191,703239,703501,704584,704997,705150,705274,705340,705446,708550,708554,709353-709354,709425,710150,712194,712198,712272,712312,712670,712893,713082,713584,713597,713804,713899,714167-714168,718281,718565,718620,718640,718665,719017,719210,719215-719218,719222,719273,719327-719354,719362,719368,719382,719649,719680,720119-720217,723338,723717-723791,724334-724371,724433-724438,724449,724481,724485,724668,724782,724795,725754,725773,725799,725839,726342,726524,726631,726637,726639,726692,726724,726992,733582 /incubator/cxf/trunk:434594-651668 Propchange: cxf/branches/2.0.x-fixes/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/AbstractDOMStreamReader.java URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/AbstractDOMStreamReader.java?rev=735799&r1=735798&r2=735799&view=diff ============================================================================== --- cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/AbstractDOMStreamReader.java (original) +++ cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/AbstractDOMStreamReader.java Mon Jan 19 12:43:08 2009 @@ -18,6 +18,7 @@ */ package org.apache.cxf.staxutils; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -27,6 +28,7 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; + /** * Abstract logic for creating XMLStreamReader from DOM documents. Its works * using adapters for Element, Node and Attribute ( @@ -34,61 +36,78 @@ * @see ElementAdapter } * @author <a href="mailto:[email protected]">Tomasz Sztelak</a> */ -public abstract class AbstractDOMStreamReader implements XMLStreamReader { +public abstract class AbstractDOMStreamReader<T, I> implements XMLStreamReader { protected int currentEvent = XMLStreamConstants.START_DOCUMENT; private Map properties = new HashMap(); - private FastStack<ElementFrame> frames = new FastStack<ElementFrame>(); + private FastStack<ElementFrame<T, I>> frames = new FastStack<ElementFrame<T, I>>(); - private ElementFrame frame; + private ElementFrame<T, I> frame; /** * */ - public static class ElementFrame { - Object element; + public static class ElementFrame<T, I> { + T element; + I currentChild; boolean started; - boolean ended; - - int currentChild = -1; - + int currentAttribute = -1; - int currentNamespace = -1; - int currentElement = -1; List<String> uris; List<String> prefixes; List<Object> attributes; List<Object> allAttributes; - final ElementFrame parent; + final ElementFrame<T, I> parent; + + public ElementFrame(T element, ElementFrame<T, I> parent) { + this.element = element; + this.parent = parent; + } - public ElementFrame(Object element, ElementFrame parent) { + public ElementFrame(T element, ElementFrame<T, I> parent, I ch) { this.element = element; this.parent = parent; + this.currentChild = ch; + } + public ElementFrame(T doc) { + this.element = doc; + parent = null; + started = true; + attributes = Collections.emptyList(); + prefixes = Collections.emptyList(); + uris = Collections.emptyList(); + allAttributes = Collections.emptyList(); } - public Object getElement() { + public T getElement() { return element; } + public I getCurrentChild() { + return currentChild; + } + public void setCurrentChild(I o) { + currentChild = o; + } } /** * @param element */ - public AbstractDOMStreamReader(ElementFrame frame) { + public AbstractDOMStreamReader(ElementFrame<T, I> frame) { this.frame = frame; frames.push(this.frame); } - protected ElementFrame getCurrentFrame() { + protected ElementFrame<T, I> getCurrentFrame() { return frame; } @@ -110,7 +129,7 @@ if (frame.ended) { frames.pop(); if (!frames.empty()) { - frame = (ElementFrame)frames.peek(); + frame = frames.peek(); } else { currentEvent = END_DOCUMENT; return currentEvent; @@ -126,13 +145,11 @@ } else if (frame.currentNamespace < getNamespaceCount() - 1) { frame.currentNamespace++; currentEvent = NAMESPACE; - } else if (frame.currentChild < getChildCount() - 1) { - frame.currentChild++; - - currentEvent = moveToChild(frame.currentChild); + } else if (hasMoreChildren()) { + currentEvent = nextChild(); if (currentEvent == START_ELEMENT) { - ElementFrame newFrame = getChildFrame(frame.currentChild); + ElementFrame<T, I> newFrame = getChildFrame(); newFrame.started = true; frame = newFrame; frames.push(this.frame); @@ -148,17 +165,15 @@ return currentEvent; } - protected void newFrame(ElementFrame newFrame) { + protected void newFrame(ElementFrame<T, I> newFrame) { } protected void endElement() { } - protected abstract int moveToChild(int currentChild); - - protected abstract ElementFrame getChildFrame(int currentChild); - - protected abstract int getChildCount(); + protected abstract boolean hasMoreChildren(); + protected abstract int nextChild(); + protected abstract ElementFrame<T, I> getChildFrame(); /* * (non-Javadoc) Modified: cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java?rev=735799&r1=735798&r2=735799&view=diff ============================================================================== --- cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java (original) +++ cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java Mon Jan 19 12:43:08 2009 @@ -30,11 +30,13 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; +import org.w3c.dom.Text; +import org.w3c.dom.TypeInfo; import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.staxutils.AbstractDOMStreamReader.ElementFrame; -public class W3CDOMStreamReader extends AbstractDOMStreamReader { +public class W3CDOMStreamReader extends AbstractDOMStreamReader<Node, Node> { private Node content; private Document document; @@ -45,11 +47,16 @@ * @param element */ public W3CDOMStreamReader(Element element) { - super(new ElementFrame(element, null)); + super(new ElementFrame<Node, Node>(element, null)); + content = element; newFrame(getCurrentFrame()); this.document = element.getOwnerDocument(); } + public W3CDOMStreamReader(Document doc) { + super(new ElementFrame<Node, Node>(doc)); + this.document = doc; + } /** * Get the document associated with this stream. @@ -65,8 +72,8 @@ * collection. */ @Override - protected final void newFrame(ElementFrame frame) { - Element element = getCurrentElement(); + protected final void newFrame(ElementFrame<Node, Node> frame) { + Node element = getCurrentNode(); frame.uris = new ArrayList<String>(); frame.prefixes = new ArrayList<String>(); frame.attributes = new ArrayList<Object>(); @@ -74,8 +81,9 @@ if (context == null) { context = new W3CNamespaceContext(); } - - context.setElement(element); + if (element instanceof Element) { + context.setElement((Element)element); + } NamedNodeMap nodes = element.getAttributes(); @@ -126,22 +134,29 @@ } @Override - protected ElementFrame getChildFrame(int currentChild) { - return new ElementFrame(getCurrentElement().getChildNodes().item(currentChild), getCurrentFrame()); + protected ElementFrame<Node, Node> getChildFrame() { + return new ElementFrame<Node, Node>(getCurrentFrame().currentChild, + getCurrentFrame()); } @Override - protected int getChildCount() { - return getCurrentElement().getChildNodes().getLength(); + protected boolean hasMoreChildren() { + if (getCurrentFrame().currentChild == null) { + return getCurrentNode().getFirstChild() != null; + } + return ((Node)getCurrentFrame().currentChild).getNextSibling() != null; } @Override - protected int moveToChild(int currentChild) { - content = getCurrentNode().getFirstChild(); - while (currentChild > 0 && content != null) { - content = content.getNextSibling(); - --currentChild; + protected int nextChild() { + ElementFrame<Node, Node> frame = getCurrentFrame(); + if (frame.currentChild == null) { + content = getCurrentNode().getFirstChild(); + } else { + content = ((Node)frame.currentChild).getNextSibling(); } + + frame.currentChild = content; switch (content.getNodeType()) { case Node.ELEMENT_NODE: return START_ELEMENT; @@ -162,7 +177,7 @@ public String getElementText() throws XMLStreamException { String result = DOMUtils.getContent(content); - ElementFrame frame = getCurrentFrame(); + ElementFrame<Node, Node> frame = getCurrentFrame(); frame.ended = true; currentEvent = END_ELEMENT; endElement(); @@ -173,7 +188,7 @@ @Override public String getNamespaceURI(String prefix) { - ElementFrame frame = getCurrentFrame(); + ElementFrame<Node, Node> frame = getCurrentFrame(); while (null != frame) { int index = frame.prefixes.indexOf(prefix); @@ -251,16 +266,22 @@ } public String getAttributeType(int i) { - return toStaxType(getAttribute(i).getNodeType()); - } - - public static String toStaxType(short jdom) { - switch (jdom) { - default: - return null; + Attr attr = getAttribute(i); + if (attr.isId()) { + return "ID"; } + TypeInfo schemaType = null; + try { + schemaType = attr.getSchemaTypeInfo(); + } catch (Throwable t) { + //DOM level 2? + schemaType = null; + } + return (schemaType == null) ? "CDATA" + : schemaType.getTypeName() == null ? "CDATA" : schemaType.getTypeName(); } + public String getAttributeValue(int i) { return getAttribute(i).getValue(); } @@ -286,7 +307,10 @@ } public String getText() { - return DOMUtils.getRawContent(getCurrentElement()); + if (content instanceof Text) { + return ((Text)content).getData(); + } + return DOMUtils.getRawContent(getCurrentNode()); } public char[] getTextCharacters() { @@ -306,7 +330,7 @@ } public QName getName() { - Element el = getCurrentElement(); + Node el = getCurrentNode(); String prefix = getPrefix(); String ln = getLocalName(); @@ -319,17 +343,17 @@ } public String getLocalName() { - String ln = getCurrentElement().getLocalName(); + String ln = getCurrentNode().getLocalName(); if (ln == null) { - ln = getCurrentElement().getNodeName(); + ln = getCurrentNode().getNodeName(); } return ln; } public String getNamespaceURI() { - String ln = getCurrentElement().getLocalName(); + String ln = getCurrentNode().getLocalName(); if (ln == null) { - ln = getCurrentElement().getNodeName(); + ln = getCurrentNode().getNodeName(); if (ln.indexOf(":") == -1) { ln = getNamespaceURI(""); } else { @@ -337,11 +361,11 @@ } return ln; } - return getCurrentElement().getNamespaceURI(); + return getCurrentNode().getNamespaceURI(); } public String getPrefix() { - String prefix = getCurrentElement().getPrefix(); + String prefix = getCurrentNode().getPrefix(); if (prefix == null) { prefix = ""; } Modified: cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/stax/JDOMStreamReader.java URL: http://svn.apache.org/viewvc/cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/stax/JDOMStreamReader.java?rev=735799&r1=735798&r2=735799&view=diff ============================================================================== --- cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/stax/JDOMStreamReader.java (original) +++ cxf/branches/2.0.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/stax/JDOMStreamReader.java Mon Jan 19 12:43:08 2009 @@ -45,7 +45,7 @@ * * @author <a href="mailto:[email protected]">Tomasz Sztelak</a> */ -public class JDOMStreamReader extends AbstractDOMStreamReader { +public class JDOMStreamReader extends AbstractDOMStreamReader<Element, Integer> { private Content content; @@ -62,7 +62,7 @@ * @param element */ public JDOMStreamReader(Element element) { - super(new ElementFrame(element, null)); + super(new ElementFrame<Element, Integer>(element, null, -1)); namespaceContext = new JDOMNamespaceContext(); setupNamespaces(element); @@ -182,21 +182,28 @@ } public Element getCurrentElement() { - return (Element)getCurrentFrame().getElement(); + return getCurrentFrame().getElement(); } @Override - protected ElementFrame getChildFrame(int currentChild) { - return new ElementFrame(getCurrentElement().getContent(currentChild), getCurrentFrame()); + protected ElementFrame<Element, Integer> getChildFrame() { + int currentChild = getCurrentFrame().getCurrentChild(); + return new ElementFrame<Element, Integer>((Element)getCurrentElement().getContent(currentChild), + getCurrentFrame(), + -1); } @Override - protected int getChildCount() { - return getCurrentElement().getContentSize(); + protected boolean hasMoreChildren() { + int currentChild = getCurrentFrame().getCurrentChild(); + return currentChild < (getCurrentElement().getContentSize() - 1); } @Override - protected int moveToChild(int currentChild) { + protected int nextChild() { + int currentChild = getCurrentFrame().getCurrentChild(); + currentChild++; + getCurrentFrame().setCurrentChild(currentChild); this.content = getCurrentElement().getContent(currentChild); if (content instanceof Text) {
