You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/05/03 14:49:37 UTC
svn commit: r940435 - in /mina/vysper/branches/nbxml-sax: ./
src/main/java/org/apache/vysper/charset/
src/main/java/org/apache/vysper/xml/decoder/
src/main/java/org/apache/vysper/xml/fragment/
src/main/java/org/apache/vysper/xml/sax/ src/main/java/org/...
Author: ngn
Date: Mon May 3 12:49:37 2010
New Revision: 940435
URL: http://svn.apache.org/viewvc?rev=940435&view=rev
Log:
Updated to use MINA 2
Cleaned up no longer used classes
Adding Javadocs
Added:
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/ResolverNamespaceResolver.java
- copied, changed from r896258, mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/ParserNamespaceResolver.java
- copied, changed from r895485, mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/StackNamespaceResolver2.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseXmlDeclarationTestCase.java
Removed:
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/NamespaceResolver.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/StackNamespaceResolver2.java
Modified:
mina/vysper/branches/nbxml-sax/pom.xml
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/charset/CharsetUtil.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMLElementBuilderFactory.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPContentHandler.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPDecoder.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementVerifier.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/NonBlockingXMLReader.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/DefaultNonBlockingXMLReader.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLParser.java
mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/AbstractAsyncXMLReaderTestCase.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/DefaultAsyncXMLReaderTestCase.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseNamespacesTestCase.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/XMPPContentHandlerTestCase.java
mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/perf/PerfTest.java
Modified: mina/vysper/branches/nbxml-sax/pom.xml
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/pom.xml?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/pom.xml (original)
+++ mina/vysper/branches/nbxml-sax/pom.xml Mon May 3 12:49:37 2010
@@ -20,7 +20,7 @@
<parent>
<artifactId>vysper-parent</artifactId>
<groupId>org.apache.vysper</groupId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>0.6-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.vysper</groupId>
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/charset/CharsetUtil.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/charset/CharsetUtil.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/charset/CharsetUtil.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/charset/CharsetUtil.java Mon May 3 12:49:37 2010
@@ -29,6 +29,14 @@ import java.nio.charset.CharsetEncoder;
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public class CharsetUtil {
+
+ /**
+ * Charset decoder for UTF-8
+ */
public static final CharsetDecoder UTF8_DECODER = Charset.forName("UTF-8").newDecoder();
+
+ /**
+ * Charset encoder for UTF-8
+ */
public static final CharsetEncoder UTF8_ENCODER = Charset.forName("UTF-8").newEncoder();
}
\ No newline at end of file
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMLElementBuilderFactory.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMLElementBuilderFactory.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMLElementBuilderFactory.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMLElementBuilderFactory.java Mon May 3 12:49:37 2010
@@ -29,11 +29,20 @@ import org.apache.vysper.xml.fragment.XM
/**
- *
+ * Factory for creating {@link XMLElementBuilder} instances
* @author The Apache MINA Project (dev@mina.apache.org)
*/
public class XMLElementBuilderFactory {
+ /**
+ * Create a {@link XMLElementBuilder}
+ * @param elementName The element local name
+ * @param namespaceURI The element namespace URI
+ * @param namespacePrefix The element namespace prefix, or null if namespace should be default
+ * @param attributes The element attributes or null if no attributes
+ * @param innerFragments The element inner fragments or null if no inner fragments
+ * @return
+ */
public AbstractXMLElementBuilder<?, ?> createBuilder(String elementName, String namespaceURI, String namespacePrefix, List<Attribute> attributes, List<XMLFragment> innerFragments) {
return new XMLElementBuilder(elementName, namespaceURI, namespacePrefix, attributes, innerFragments);
}
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPContentHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPContentHandler.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPContentHandler.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPContentHandler.java Mon May 3 12:49:37 2010
@@ -22,7 +22,6 @@ package org.apache.vysper.xml.decoder;
import org.apache.vysper.xml.fragment.AbstractXMLElementBuilder;
import org.apache.vysper.xml.fragment.Renderer;
import org.apache.vysper.xml.fragment.XMLElement;
-import org.apache.vysper.xml.sax.impl.XMLParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
@@ -32,7 +31,7 @@ import org.xml.sax.SAXException;
/**
- * partitions the incoming byte stream in particles of XML. either those enclosed by '<' and '>', or the text inbetween.
+ * SAX content handler for the purpose of parsing an incoming XMPP XML stream.
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
@@ -71,6 +70,9 @@ public class XMPPContentHandler implemen
}
+ /**
+ * {@inheritDoc}
+ */
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO handle start and length
@@ -78,6 +80,9 @@ public class XMPPContentHandler implemen
}
+ /**
+ * {@inheritDoc}
+ */
public void endElement(String uri, String localName, String qName)
throws SAXException {
depth--;
@@ -93,11 +98,13 @@ public class XMPPContentHandler implemen
}
+ /**
+ * {@inheritDoc}
+ */
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// increase element depth
depth++;
-
if(builder == null) {
builder = builderFactory.createBuilder(localName, uri, extractPrefix(qName), null, null);
} else {
@@ -107,9 +114,9 @@ public class XMPPContentHandler implemen
for(int i = 0; i<atts.getLength(); i++) {
builder.addAttribute(atts.getURI(i), atts.getLocalName(i), atts.getValue(i));
}
-
+
if(depth == 1) {
- // outer stanza:stanza element, needs to be dispatched right away
+ // outer stream:stream element, needs to be dispatched right away
emitStanza();
}
}
@@ -137,25 +144,46 @@ public class XMPPContentHandler implemen
}
}
+ /**
+ * {@inheritDoc}
+ */
public void endDocument() throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void startPrefixMapping(String prefix, String uri)
throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void endPrefixMapping(String prefix) throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void processingInstruction(String target, String data)
throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void setDocumentLocator(Locator locator) { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void skippedEntity(String name) throws SAXException { /* ignore */ }
+ /**
+ * {@inheritDoc}
+ */
public void startDocument() throws SAXException { /* ignore */ }
-
-
-
}
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPDecoder.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPDecoder.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPDecoder.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/decoder/XMPPDecoder.java Mon May 3 12:49:37 2010
@@ -19,8 +19,8 @@
*/
package org.apache.vysper.xml.decoder;
-import org.apache.mina.common.ByteBuffer;
-import org.apache.mina.common.IoSession;
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
import org.apache.mina.filter.codec.ProtocolDecoderOutput;
import org.apache.vysper.charset.CharsetUtil;
@@ -36,7 +36,9 @@ import org.apache.vysper.xml.sax.impl.De
*/
public class XMPPDecoder extends CumulativeProtocolDecoder {
- public static final String SESSION_ATTRIBUTE_NAME = "xmppParser";
+ private static final String STREAM_STREAM = "<stream:stream";
+
+ public static final String SESSION_ATTRIBUTE_NAME = "xmppParser";
private XMLElementBuilderFactory builderFactory = new XMLElementBuilderFactory();
@@ -56,28 +58,44 @@ public class XMPPDecoder extends Cumulat
}
public void stanza(XMLElement element) {
+ if(element.getName().equals("stream")) {
+ // reset the reader
+ }
+
protocolDecoder.write(element);
}
}
- @Override
- public boolean doDecode(IoSession ioSession, ByteBuffer byteBuffer, ProtocolDecoderOutput protocolDecoderOutput) throws Exception {
-
- NonBlockingXMLReader reader = (NonBlockingXMLReader) ioSession.getAttribute(SESSION_ATTRIBUTE_NAME);
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected boolean doDecode(IoSession session,
+ IoBuffer in, ProtocolDecoderOutput out) throws Exception {
+ NonBlockingXMLReader reader = (NonBlockingXMLReader) session.getAttribute(SESSION_ATTRIBUTE_NAME);
- if (reader == null) {
+ // peek to find XML stream resets
+ // TODO this is a bit ugly, revisit
+ in.mark();
+ String peek = in.getString(14, CharsetUtil.UTF8_DECODER);
+ in.reset();
+
+ if (reader == null || STREAM_STREAM.equals(peek)) {
reader = new DefaultNonBlockingXMLReader();
+
+ // we need to check the jabber:client/jabber:server NS declarations
+ reader.setFeature(DefaultNonBlockingXMLReader.FEATURE_NAMESPACE_PREFIXES, true);
reader.setContentHandler(new XMPPContentHandler(builderFactory));
- ioSession.setAttribute(SESSION_ATTRIBUTE_NAME, reader);
+ session.setAttribute(SESSION_ATTRIBUTE_NAME, reader);
}
XMPPContentHandler contentHandler = (XMPPContentHandler) reader.getContentHandler();
- contentHandler.setListener(new MinaStanzaListener(protocolDecoderOutput));
+ contentHandler.setListener(new MinaStanzaListener(out));
- reader.parse(byteBuffer, CharsetUtil.UTF8_DECODER);
+ reader.parse(in, CharsetUtil.UTF8_DECODER);
// we have parsed what we got, invoke again when more data is available
return false;
- }
+ }
}
\ No newline at end of file
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/Renderer.java Mon May 3 12:49:37 2010
@@ -37,7 +37,7 @@ public class Renderer {
public Renderer(XMLElement element) {
this.topElement = element;
- StackNamespaceResolver nsResolver = new StackNamespaceResolver();
+ ResolverNamespaceResolver nsResolver = new ResolverNamespaceResolver();
renderXMLElement(topElement, nsResolver, openElementBuffer, elementContentBuffer, closeElementBuffer);
}
@@ -57,7 +57,7 @@ public class Renderer {
return openElementBuffer.toString() + elementContentBuffer.toString() + closeElementBuffer.toString();
}
- private void renderXMLElement(XMLElement element, StackNamespaceResolver nsResolver, StringBuilder openElementBuffer, StringBuilder elementContentBuffer, StringBuilder closeElementBuffer) {
+ private void renderXMLElement(XMLElement element, ResolverNamespaceResolver nsResolver, StringBuilder openElementBuffer, StringBuilder elementContentBuffer, StringBuilder closeElementBuffer) {
nsResolver.push(element);
openElementBuffer.append("<");
@@ -77,12 +77,15 @@ public class Renderer {
}
for (Attribute attribute : element.getAttributes()) {
- // make sure we do not render namespace attributes,
+ // make sure we do not render namespace attributes,
// nor normal attributes containing namespace declarations (probably due to
// the parser not correctly creating namespace attributes for these which are then
// copied into for example error responses)
- openElementBuffer.append(" ");
- renderAttribute(openElementBuffer, attribute, nsResolver);
+
+ if(!attribute.getName().startsWith("xmlns")) {
+ openElementBuffer.append(" ");
+ renderAttribute(openElementBuffer, attribute, nsResolver);
+ }
}
openElementBuffer.append(">");
@@ -108,7 +111,7 @@ public class Renderer {
return name.equals("xmlns") || name.startsWith("xmlns:");
}
- private void renderElementName(StringBuilder buffer, XMLElement element, NamespaceResolver nsResolver) {
+ private void renderElementName(StringBuilder buffer, XMLElement element, ResolverNamespaceResolver nsResolver) {
// if the element has a namespace prefix, retrieves the prefix from the defining attribute
if (element.getNamespacePrefix().length() > 0) {
buffer.append(element.getNamespacePrefix()).append(COLON);
@@ -123,7 +126,7 @@ public class Renderer {
buffer.append(element.getName());
}
- private void renderAttribute(StringBuilder buffer, Attribute attribute, NamespaceResolver nsResolver) {
+ private void renderAttribute(StringBuilder buffer, Attribute attribute, ResolverNamespaceResolver nsResolver) {
String qname;
if(!attribute.getNamespaceUri().equals("")) {
// attribute is in a namespace, resolve prefix
Copied: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/ResolverNamespaceResolver.java (from r896258, mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java)
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/ResolverNamespaceResolver.java?p2=mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/ResolverNamespaceResolver.java&p1=mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java&r1=896258&r2=940435&rev=940435&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/StackNamespaceResolver.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/ResolverNamespaceResolver.java Mon May 3 12:49:37 2010
@@ -29,11 +29,11 @@ import java.util.Map.Entry;
/**
* Naive implementation, will be replaced in later stages of this change
*/
-public class StackNamespaceResolver implements NamespaceResolver {
+public class ResolverNamespaceResolver {
private Stack<XMLElement> elements = new Stack<XMLElement>();
- public StackNamespaceResolver() {
+ public ResolverNamespaceResolver() {
}
public void push(XMLElement elm) {
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementVerifier.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementVerifier.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementVerifier.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/fragment/XMLElementVerifier.java Mon May 3 12:49:37 2010
@@ -20,6 +20,7 @@
package org.apache.vysper.xml.fragment;
+import java.util.Collection;
import java.util.List;
/**
@@ -139,9 +140,13 @@ public class XMLElementVerifier {
}
public boolean namespacePresent(String namespaceURI) {
- for (Attribute attribute : element.getAttributes()) {
- if (isNamespaceAttribute(attribute)
- && attribute.getValue().equals(namespaceURI)) {
+ Collection<String> nsUris = element.getDeclaredNamespaces().values();
+ if(nsUris.contains(namespaceURI)) {
+ return true;
+ }
+
+ for(Attribute attribute : element.getAttributes()) {
+ if(attribute.getName().startsWith("xmlns") && attribute.getValue().equals(namespaceURI)) {
return true;
}
}
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/NonBlockingXMLReader.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/NonBlockingXMLReader.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/NonBlockingXMLReader.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/NonBlockingXMLReader.java Mon May 3 12:49:37 2010
@@ -22,7 +22,8 @@ package org.apache.vysper.xml.sax;
import java.io.IOException;
import java.nio.charset.CharsetDecoder;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.vysper.xml.sax.impl.XMLParser;
import org.xml.sax.ContentHandler;
import org.xml.sax.DTDHandler;
import org.xml.sax.EntityResolver;
@@ -300,7 +301,14 @@ public interface NonBlockingXMLReader {
*/
public ErrorHandler getErrorHandler ();
- public void parse (ByteBuffer buffer, CharsetDecoder decoder) throws IOException, SAXException;
+ /**
+ * Parse XML in non-blocking mode. Issues events to the registered {@link ContentHandler} and {@link ErrorHandler}
+ * @param buffer Buffer containing XML input data
+ * @param decoder The charset decoder to use for parsing
+ * @throws IOException
+ * @throws SAXException
+ */
+ public void parse (IoBuffer buffer, CharsetDecoder decoder) throws IOException, SAXException;
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/DefaultNonBlockingXMLReader.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/DefaultNonBlockingXMLReader.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/DefaultNonBlockingXMLReader.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/DefaultNonBlockingXMLReader.java Mon May 3 12:49:37 2010
@@ -24,7 +24,7 @@ import java.nio.charset.CharsetDecoder;
import java.util.HashMap;
import java.util.Map;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.xml.sax.NonBlockingXMLReader;
import org.xml.sax.ContentHandler;
import org.xml.sax.DTDHandler;
@@ -84,11 +84,11 @@ public class DefaultNonBlockingXMLReader
}
if(features.containsKey(name)) {
- // TODO make configurable fatures and values easier to manage
+ // TODO make configurable features and values easier to manage
if(name.equals(FEATURE_NAMESPACES) && value) {
// ok
- } else if(name.equals(FEATURE_NAMESPACE_PREFIXES) && !value) {
- // ok
+ } else if(name.equals(FEATURE_NAMESPACE_PREFIXES)) {
+ features.put(FEATURE_NAMESPACE_PREFIXES, value);
} else if(name.equals(FEATURE_COMMENTS_ALLOWED)) {
features.put(FEATURE_COMMENTS_ALLOWED, value);
} else {
@@ -172,7 +172,7 @@ public class DefaultNonBlockingXMLReader
/**
* {@inheritDoc}
*/
- public void parse (ByteBuffer buffer, CharsetDecoder decoder) throws IOException, SAXException {
+ public void parse (IoBuffer buffer, CharsetDecoder decoder) throws IOException, SAXException {
if(parser == null) {
parser = new XMLParser(contentHandler, errorHandler, features);
}
Copied: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/ParserNamespaceResolver.java (from r895485, mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/StackNamespaceResolver2.java)
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/ParserNamespaceResolver.java?p2=mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/ParserNamespaceResolver.java&p1=mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/StackNamespaceResolver2.java&r1=895485&r2=940435&rev=940435&view=diff
==============================================================================
--- mina/sandbox/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/StackNamespaceResolver2.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/ParserNamespaceResolver.java Mon May 3 12:49:37 2010
@@ -24,18 +24,17 @@ import java.util.Map;
import java.util.Stack;
import java.util.Map.Entry;
-import org.apache.vysper.xml.fragment.NamespaceResolver;
import org.apache.vysper.xml.fragment.Namespaces;
/**
* Naive implementation, will be replaced in later stages of this change
*/
-public class StackNamespaceResolver2 {
+public class ParserNamespaceResolver {
private Stack<Map<String, String>> elements = new Stack<Map<String, String>>();
- public StackNamespaceResolver2() {
+ public ParserNamespaceResolver() {
}
public void push(Map<String, String> elmXmlns) {
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLParser.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLParser.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLParser.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLParser.java Mon May 3 12:49:37 2010
@@ -29,7 +29,7 @@ import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.xml.sax.impl.XMLTokenizer.TokenListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -56,11 +56,12 @@ public class XMLParser implements TokenL
private ContentHandler contentHandler;
private ErrorHandler errorHandler;
- private StackNamespaceResolver2 nsResolver = new StackNamespaceResolver2();
+ private ParserNamespaceResolver nsResolver = new ParserNamespaceResolver();
private static enum State {
START,
IN_TAG,
+ IN_DECLARATION,
IN_END_TAG,
AFTER_START_NAME,
AFTER_END_NAME,
@@ -93,6 +94,7 @@ public class XMLParser implements TokenL
private boolean sentStartDocument = false;
// features
+ boolean reportNsAttributes = false;
boolean commentsAllowed = true;
@@ -101,6 +103,7 @@ public class XMLParser implements TokenL
this.errorHandler = errorHandler;
commentsAllowed = feature(features, DefaultNonBlockingXMLReader.FEATURE_COMMENTS_ALLOWED, true);
+ reportNsAttributes = feature(features, DefaultNonBlockingXMLReader.FEATURE_NAMESPACE_PREFIXES, false);
this.tokenizer = new XMLTokenizer(this);
}
@@ -113,18 +116,19 @@ public class XMLParser implements TokenL
}
}
- public void parse(ByteBuffer byteBuffer, CharsetDecoder charsetDecoder) throws SAXException {
+ public void parse(IoBuffer byteBuffer, CharsetDecoder charsetDecoder) throws SAXException {
if(state == State.CLOSED) throw new SAXException("Parser is closed");
try {
tokenizer.parse(byteBuffer, charsetDecoder);
} catch(RuntimeException e) {
+ e.printStackTrace();
fatalError(e.getMessage());
}
}
public void token(char c, String token) throws SAXException {
- if(log.isDebugEnabled()) {
+ if(log.isTraceEnabled()) {
String s = (token == null) ? Character.toString(c) : token;
log.trace("Parser got token {} in state {}", s, state);
}
@@ -142,6 +146,8 @@ public class XMLParser implements TokenL
// token must be element name or / for a end tag
if(c == '/') {
state = State.IN_END_TAG;
+ } else if(c == '?') {
+ state = State.IN_DECLARATION;
} else if(c == '!') {
if(commentsAllowed) {
state = State.AFTER_COMMENT_BANG;
@@ -283,6 +289,12 @@ public class XMLParser implements TokenL
return;
}
break;
+ case IN_DECLARATION:
+ // wait for >
+ if(c == '>') {
+ state = State.START;
+ }
+ break;
}
}
@@ -335,17 +347,27 @@ public class XMLParser implements TokenL
List<Attribute> nonNsAttributes = new ArrayList<Attribute>();
for(Entry<String, String> attribute: attributes.entrySet()) {
String attQname = attribute.getKey();
- if(!attQname.equals("xmlns") && !attQname.startsWith("xmlns:")) {
+
+ // only report NS declaration attributes if the feature is set to
+ if(reportNsAttributes) {
+ nonNsAttributes.add(new Attribute(attQname, null, attQname, attribute.getValue()));
+ } else if(!attQname.equals("xmlns") && !attQname.startsWith("xmlns:")) {
String attLocalName = extractLocalName(attQname);
String attPrefix = extractNsPrefix(attQname);
- String attUri = nsResolver.resolveUri(attPrefix);
- if(attUri == null) {
- if(attPrefix.length() > 0) {
- fatalError("Undeclared namespace prefix: " + attPrefix);
- return;
- } else {
- attUri = "";
+ String attUri;
+ if(attPrefix.length() > 0) {
+ attUri = nsResolver.resolveUri(attPrefix);
+ if(attUri == null) {
+ if(attPrefix.length() > 0) {
+ fatalError("Undeclared namespace prefix: " + attPrefix);
+ return;
+ } else {
+ attUri = "";
+ }
}
+ } else {
+ // by default, attributes are in the empty namespace
+ attUri = "";
}
nonNsAttributes.add(new Attribute(attLocalName, attUri, attQname, attribute.getValue()));
}
@@ -434,7 +456,7 @@ public class XMLParser implements TokenL
// make sure we send a start document event
startDocument();
-
+
errorHandler.fatalError(new SAXParseException(message, null));
}
Modified: mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java (original)
+++ mina/vysper/branches/nbxml-sax/src/main/java/org/apache/vysper/xml/sax/impl/XMLTokenizer.java Mon May 3 12:49:37 2010
@@ -22,7 +22,7 @@ package org.apache.vysper.xml.sax.impl;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.charset.CharsetUtil;
import org.xml.sax.SAXException;
@@ -63,7 +63,7 @@ public class XMLTokenizer {
* @return the new particle or NULL, if the buffer was exhausted before the particle was completed
* @throws Exception
*/
- public void parse(ByteBuffer byteBuffer, CharsetDecoder decoder) throws SAXException {
+ public void parse(IoBuffer byteBuffer, CharsetDecoder decoder) throws SAXException {
lastPosition = byteBuffer.position();
while (byteBuffer.hasRemaining() && state != State.CLOSED) {
@@ -140,13 +140,13 @@ public class XMLTokenizer {
return c == '<' || c == '>' || c == '-' || c == '!' || c == '/' || c == '?' || c == '=';
}
- private void emit(char token, ByteBuffer byteBuffer) throws SAXException {
+ private void emit(char token, IoBuffer byteBuffer) throws SAXException {
listener.token(token, null);
lastPosition = byteBuffer.position();
}
- private void emit(ByteBuffer byteBuffer, CharsetDecoder decoder) throws SAXException {
+ private void emit(IoBuffer byteBuffer, CharsetDecoder decoder) throws SAXException {
int endPosition = byteBuffer.position();
int oldLimit = byteBuffer.limit();
byteBuffer.position(lastPosition);
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/fragment/StackNamespaceResolverTestCase.java Mon May 3 12:49:37 2010
@@ -21,7 +21,7 @@ package org.apache.vysper.xml.fragment;
import org.apache.vysper.xml.fragment.Attribute;
import org.apache.vysper.xml.fragment.Namespaces;
-import org.apache.vysper.xml.fragment.StackNamespaceResolver;
+import org.apache.vysper.xml.fragment.ResolverNamespaceResolver;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xml.fragment.XMLElementBuilder;
@@ -31,7 +31,7 @@ import junit.framework.TestCase;
*/
public class StackNamespaceResolverTestCase extends TestCase {
- private StackNamespaceResolver resolver = new StackNamespaceResolver();
+ private ResolverNamespaceResolver resolver = new ResolverNamespaceResolver();
public void testPushSingleElement() {
XMLElement elm = new XMLElementBuilder("foo")
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/AbstractAsyncXMLReaderTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/AbstractAsyncXMLReaderTestCase.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/AbstractAsyncXMLReaderTestCase.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/AbstractAsyncXMLReaderTestCase.java Mon May 3 12:49:37 2010
@@ -27,12 +27,9 @@ import java.util.Map.Entry;
import junit.framework.TestCase;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.charset.CharsetUtil;
import org.apache.vysper.xml.sax.NonBlockingXMLReader;
-import org.apache.vysper.xml.sax.impl.Attribute;
-import org.apache.vysper.xml.sax.impl.DefaultAttributes;
-import org.apache.vysper.xml.sax.impl.DefaultNonBlockingXMLReader;
import org.apache.vysper.xml.sax.impl.TestHandler.CharacterEvent;
import org.apache.vysper.xml.sax.impl.TestHandler.EndDocumentEvent;
import org.apache.vysper.xml.sax.impl.TestHandler.EndElementEvent;
@@ -123,7 +120,7 @@ public abstract class AbstractAsyncXMLRe
reader.setContentHandler(handler);
reader.setErrorHandler(handler);
- reader.parse(ByteBuffer.wrap(xml.getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap(xml.getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
return handler.getEvents();
}
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/DefaultAsyncXMLReaderTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/DefaultAsyncXMLReaderTestCase.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/DefaultAsyncXMLReaderTestCase.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/DefaultAsyncXMLReaderTestCase.java Mon May 3 12:49:37 2010
@@ -19,10 +19,9 @@
*/
package org.apache.vysper.xml.sax.impl;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.charset.CharsetUtil;
import org.apache.vysper.xml.sax.NonBlockingXMLReader;
-import org.apache.vysper.xml.sax.impl.DefaultNonBlockingXMLReader;
import org.xml.sax.DTDHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
@@ -41,11 +40,11 @@ public class DefaultAsyncXMLReaderTestCa
reader.setErrorHandler(handler);
// causes a fatal error
- reader.parse(ByteBuffer.wrap("<root></error>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap("<root></error>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
try {
// not allowed to parse after an error
- reader.parse(ByteBuffer.wrap("<root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap("<root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
fail("Must throw SAXException");
} catch(SAXException e) {
// OK
@@ -60,11 +59,11 @@ public class DefaultAsyncXMLReaderTestCa
reader.setErrorHandler(handler);
// causes a fatal error
- reader.parse(ByteBuffer.wrap("<root></root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap("<root></root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
try {
// not allowed to parse after end of document
- reader.parse(ByteBuffer.wrap("<root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap("<root>".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
fail("Must throw SAXException");
} catch(SAXException e) {
// OK
@@ -138,7 +137,7 @@ public class DefaultAsyncXMLReaderTestCa
public void testSetFeatureDuringParse() throws Exception {
DefaultNonBlockingXMLReader reader = new DefaultNonBlockingXMLReader();
- reader.parse(ByteBuffer.wrap("<foo />".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap("<foo />".getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
try {
reader.setFeature("http://xml.org/sax/features/namespaces", true);
fail("Must throw SAXNotSupportedException");
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseNamespacesTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseNamespacesTestCase.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseNamespacesTestCase.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseNamespacesTestCase.java Mon May 3 12:49:37 2010
@@ -52,6 +52,17 @@ public class ParseNamespacesTestCase ext
assertFalse(events.hasNext());
}
+ public void testDefaultedAttribute() throws Exception {
+ Iterator<TestEvent> events = parse("<root att='foo' xmlns='urn:test'></root>").iterator();
+
+ assertStartDocument(events.next());
+ assertStartElement("urn:test", "root", "root", attributes(new Attribute("att", "", "att", "foo")), events.next());
+ assertEndElement("urn:test", "root", "root", events.next());
+ assertEndDocument(events.next());
+
+ assertFalse(events.hasNext());
+ }
+
public void testSimpleQNameElement() throws Exception {
Iterator<TestEvent> events = parse("<p:root xmlns:p='urn:test'></p:root>").iterator();
Added: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseXmlDeclarationTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseXmlDeclarationTestCase.java?rev=940435&view=auto
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseXmlDeclarationTestCase.java (added)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/ParseXmlDeclarationTestCase.java Mon May 3 12:49:37 2010
@@ -0,0 +1,44 @@
+/*
+ * 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.vysper.xml.sax.impl;
+
+import java.util.Iterator;
+
+import org.apache.vysper.xml.sax.impl.TestHandler.TestEvent;
+
+
+/**
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class ParseXmlDeclarationTestCase extends AbstractAsyncXMLReaderTestCase {
+
+ public void testEmptyElement() throws Exception {
+ Iterator<TestEvent> events = parse("<?xml version=\"1.0\"?><root />").iterator();
+
+ assertStartDocument(events.next());
+ // no event for the declaration
+ assertStartElement("", "root", "root", events.next());
+ assertEndElement("", "root", "root", events.next());
+ assertEndDocument(events.next());
+
+ assertNoMoreevents(events);
+ }
+
+}
\ No newline at end of file
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/XMPPContentHandlerTestCase.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/XMPPContentHandlerTestCase.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/XMPPContentHandlerTestCase.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/impl/XMPPContentHandlerTestCase.java Mon May 3 12:49:37 2010
@@ -25,13 +25,12 @@ import java.util.List;
import junit.framework.TestCase;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.charset.CharsetUtil;
import org.apache.vysper.xml.decoder.XMPPContentHandler;
import org.apache.vysper.xml.decoder.XMPPContentHandler.StanzaListener;
import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xml.sax.NonBlockingXMLReader;
-import org.apache.vysper.xml.sax.impl.DefaultNonBlockingXMLReader;
/**
* @author The Apache MINA Project (dev@mina.apache.org)
@@ -67,7 +66,7 @@ public class XMPPContentHandlerTestCase
}
private void parse(NonBlockingXMLReader reader, String xml) throws Exception {
- reader.parse(ByteBuffer.wrap(xml.getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
+ reader.parse(IoBuffer.wrap(xml.getBytes("UTF-8")), CharsetUtil.UTF8_DECODER);
}
}
\ No newline at end of file
Modified: mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/perf/PerfTest.java
URL: http://svn.apache.org/viewvc/mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/perf/PerfTest.java?rev=940435&r1=940434&r2=940435&view=diff
==============================================================================
--- mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/perf/PerfTest.java (original)
+++ mina/vysper/branches/nbxml-sax/src/test/java/org/apache/vysper/xml/sax/perf/PerfTest.java Mon May 3 12:49:37 2010
@@ -19,23 +19,44 @@
*/
package org.apache.vysper.xml.sax.perf;
-import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.core.buffer.IoBuffer;
import org.apache.vysper.charset.CharsetUtil;
+import org.apache.vysper.xml.decoder.XMPPContentHandler;
+import org.apache.vysper.xml.decoder.XMPPContentHandler.StanzaListener;
+import org.apache.vysper.xml.fragment.XMLElement;
import org.apache.vysper.xml.sax.impl.DefaultNonBlockingXMLReader;
/**
*
* @author The Apache MINA Project (dev@mina.apache.org)
*/
-public class PerfTest {
+public class PerfTest {
+ private static class CounterStanzaListener implements StanzaListener {
+
+ public int counter = 0;
+
+ public void stanza(XMLElement element) {
+ counter++;
+ }
+
+ }
+
+ private static final String SINGLE_LEVEL_XML = "<child att='foo' att2='bar'></child>";
+ private static final String NESTED_XML = "<child att='foo' att2='bar'><child2><child3><child4></child4></child3></child2></child>";
+
+
public static void main(String[] args) throws Exception {
- ByteBuffer opening = ByteBuffer.wrap("<p:root xmlns:p='http://example.com'>".getBytes("UTF-8"));
- ByteBuffer buffer = ByteBuffer.wrap("<child att='foo' att2='bar' />text".getBytes("UTF-8"));
+ IoBuffer opening = IoBuffer.wrap("<p:root xmlns:p='http://example.com'>".getBytes("UTF-8"));
+ IoBuffer buffer = IoBuffer.wrap(SINGLE_LEVEL_XML.getBytes("UTF-8"));
DefaultNonBlockingXMLReader reader = new DefaultNonBlockingXMLReader();
-
+ CounterStanzaListener listener = new CounterStanzaListener();
+ XMPPContentHandler contentHandler = new XMPPContentHandler();
+ contentHandler.setListener(listener);
+ reader.setContentHandler(contentHandler);
+
StopWatch watch = new StopWatch();
reader.parse(opening, CharsetUtil.UTF8_DECODER);
@@ -45,6 +66,7 @@ public class PerfTest {
}
watch.stop();
+ System.out.println(listener.counter + " stanzas parsed");
System.out.println(watch);
}