Author: mrglavas Date: Mon Oct 2 20:20:05 2006 New Revision: 452304 URL: http://svn.apache.org/viewvc?view=rev&rev=452304 Log: JIRA Issue #1199:
http://issues.apache.org/jira/browse/XERCESJ-1199 Attempt to set the StAXSAXHandler on the XMLReader as a LexicalHandler and as a DeclHandler. It is now able to handle comments and CDATA sections. Still needs a bit of work to support DTD events. Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java?view=diff&rev=452304&r1=452303&r2=452304 ============================================================================== --- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java (original) +++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java Mon Oct 2 20:20:05 2006 @@ -28,8 +28,10 @@ import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; +import org.apache.xerces.impl.Constants; import org.xml.sax.Attributes; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import org.xml.sax.XMLReader; /** @@ -41,6 +43,24 @@ */ public class SAXXMLStreamReaderImpl implements XMLStreamReader { + // + // Constants + // + + // properties + + /** Property id: lexical handler. */ + private static final String LEXICAL_HANDLER = + Constants.SAX_PROPERTY_PREFIX + Constants.LEXICAL_HANDLER_PROPERTY; + + /** Property id: declaration handler. */ + private static final String DECLARATION_HANDLER = + Constants.SAX_PROPERTY_PREFIX + Constants.DECLARATION_HANDLER_PROPERTY; + + // + // Data + // + // The XMLInputFactory instance which creates the SAXXMLStreamReader private XMLInputFactory xif; @@ -110,6 +130,22 @@ xr.setEntityResolver(handler); xr.setErrorHandler(handler); + // Try to set a lexical handler. + try { + xr.setProperty(LEXICAL_HANDLER, handler); + } + // If the XMLReader doesn't support this property ignore the exception. + catch (SAXException e) {} + + // Try to set a declaration handler. + try { + xr.setProperty(DECLARATION_HANDLER, handler); + } + // If the XMLReader doesn't support this property ignore the exception. + catch (SAXException e) { + e.printStackTrace(); + } + dc = new NamespaceContextImpl(); synchronized (asp) { @@ -136,9 +172,10 @@ * @return The value of the property * @throws IllegalArgumentException if name is null */ - public Object getProperty(java.lang.String name) throws java.lang.IllegalArgumentException { - if (name == null) - throw new IllegalArgumentException("The feature name should not be null"); + public Object getProperty(String name) throws java.lang.IllegalArgumentException { + if (name == null) { + throw new IllegalArgumentException("The feature name must not be null"); + } return xif.getProperty(name); } Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java?view=diff&rev=452304&r1=452303&r2=452304 ============================================================================== --- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java (original) +++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java Mon Oct 2 20:20:05 2006 @@ -22,34 +22,32 @@ import org.xml.sax.Attributes; import org.xml.sax.Locator; import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.ext.DefaultHandler2; /** * @author Hua Lei * * @version $Id$ */ -final class StAXSAXHandler extends DefaultHandler { +final class StAXSAXHandler extends DefaultHandler2 { private final AsyncSAXParser asp; private final SAXXMLStreamReaderImpl reader; private final SAXLocation loc; private StringBuffer buf; + private boolean inCDATA; public StAXSAXHandler(AsyncSAXParser asp, SAXXMLStreamReaderImpl reader, SAXLocation loc) { this.asp = asp; this.reader = reader; this.loc = loc; - if (reader.isCoalescing) { - buf = new StringBuffer(); - } + this.buf = new StringBuffer(); } public void characters(char[] ch, int start, int length) throws SAXException { try { - reader.setCurType(XMLStreamConstants.CHARACTERS); - - if (reader.isCoalescing) { + reader.setCurType(!inCDATA ? XMLStreamConstants.CHARACTERS : XMLStreamConstants.CDATA); + if (reader.isCoalescing || inCDATA) { buf.append(ch, start, length); return; } @@ -210,11 +208,52 @@ loc.setLocator(locator); } - public synchronized void skippedEntity(String name) throws SAXException{ + public synchronized void skippedEntity(String name) throws SAXException { try { reader.setCurType(XMLStreamConstants.ENTITY_REFERENCE); asp.setEntityName(name); asp.setCharacters(null, 0, 0); + synchronized (asp) { + asp.notify(); + asp.wait(); + } + } + catch (Exception e) { + throw new SAXException(e.getMessage(), e); + } + } + + public synchronized void comment(char[] ch, int start, int length) throws SAXException { + try { + checkCoalescing(); + reader.setCurType(XMLStreamConstants.COMMENT); + asp.setCharacters(ch, start, length); + synchronized (asp) { + asp.notify(); + asp.wait(); + } + } + catch (Exception e) { + throw new SAXException(e.getMessage(), e); + } + } + + public synchronized void startCDATA() throws SAXException { + try { + checkCoalescing(); + inCDATA = true; + } + catch (Exception e) { + throw new SAXException(e.getMessage(), e); + } + } + + public synchronized void endCDATA() throws SAXException { + try { + inCDATA = false; + char[] chs = buf.toString().toCharArray(); + asp.setCharacters(chs, 0, chs.length); + buf.setLength(0); synchronized (asp) { asp.notify(); asp.wait(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
