Class BodyParserSAX

  • All Implemented Interfaces:
    BodyParser

    final class BodyParserSAX
    extends java.lang.Object
    implements BodyParser
    Implementation of the BodyParser interface which uses the SAX API that is part of the JDK. Due to the fact that we can cache and reuse SAXPArser instances, this has proven to be significantly faster than the use of the javax.xml.stream API introduced in Java 6 while simultaneously providing an implementation accessible to Java 5 users.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  BodyParserSAX.Handler
      SAX event handler class.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static java.util.logging.Logger LOG
      Logger.
      private static java.lang.ThreadLocal<java.lang.ref.SoftReference<javax.xml.parsers.SAXParser>> PARSER
      Thread local to contain a SAX parser instance for each thread that attempts to use one.
      private static javax.xml.parsers.SAXParserFactory SAX_FACTORY
      SAX parser factory.
    • Constructor Summary

      Constructors 
      Constructor Description
      BodyParserSAX()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private static javax.xml.parsers.SAXParser getSAXParser()
      Gets a SAXParser for use in parsing incoming messages.
      BodyParserResults parse​(java.lang.String xml)
      Parses the XML message, extracting the useful data from the initial body element and returning it in a results object.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOG

        private static final java.util.logging.Logger LOG
        Logger.
      • SAX_FACTORY

        private static final javax.xml.parsers.SAXParserFactory SAX_FACTORY
        SAX parser factory.
      • PARSER

        private static final java.lang.ThreadLocal<java.lang.ref.SoftReference<javax.xml.parsers.SAXParser>> PARSER
        Thread local to contain a SAX parser instance for each thread that attempts to use one. This allows us to gain an order of magnitude of performance as a result of not constructing parsers for each invocation while retaining thread safety.
    • Constructor Detail

      • BodyParserSAX

        BodyParserSAX()
    • Method Detail

      • parse

        public BodyParserResults parse​(java.lang.String xml)
                                throws BOSHException
        Parses the XML message, extracting the useful data from the initial body element and returning it in a results object.
        Specified by:
        parse in interface BodyParser
        Parameters:
        xml - XML to parse
        Returns:
        useful data parsed out of the XML
        Throws:
        BOSHException - on parse error
      • getSAXParser

        private static javax.xml.parsers.SAXParser getSAXParser()
        Gets a SAXParser for use in parsing incoming messages.
        Returns:
        parser instance