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 ([email protected])
  */
 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 ([email protected])
  */
 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 ([email protected])
  */
@@ -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 ([email protected])
+ */
+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 ([email protected])
@@ -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 ([email protected])
  */
-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);
                
        }


Reply via email to