java.lang.Object
com.atlassian.confluence.content.render.xhtml.StaxUtils

public final class StaxUtils extends Object
  • Constructor Details

    • StaxUtils

      public StaxUtils()
  • Method Details

    • isHTML5VoidElement

      public static boolean isHTML5VoidElement(QName name)
    • isHTML5RawTextlement

      public static boolean isHTML5RawTextlement(QName name)
    • writeStartElement

      public static void writeStartElement(XMLStreamWriter writer, QName element) throws XMLStreamException
      Write the element start on the provided XMLStreamWriter
      Throws:
      XMLStreamException
      Since:
      5.6
    • writeAttribute

      public static void writeAttribute(XMLStreamWriter writer, QName attribute, String value) throws XMLStreamException
      Write an attribute and its value on the provided XMLStreamWriter
      Throws:
      XMLStreamException
      Since:
      5.6
    • writeRawXML

      public static void writeRawXML(XMLStreamWriter writer, Writer out, Streamable streamable) throws IOException, XMLStreamException
      Write raw XML properly on the provided Writer, which is wrapped by a XMLStreamWriter
      Throws:
      IOException
      XMLStreamException
      Since:
      5.6
    • closeQuietly

      public static void closeQuietly(@Nullable XMLEventReader xmlEventReader)
    • closeQuietly

      public static void closeQuietly(XMLStreamReader xmlStreamReader)
    • closeQuietly

      public static void closeQuietly(@Nullable XMLEventWriter xmlEventWriter)
    • closeQuietly

      public static void closeQuietly(XMLStreamWriter xmlStreamWriter)
    • getAttributeValue

      public static String getAttributeValue(StartElement startElement, String attributeName)
    • getAttributeValue

      public static String getAttributeValue(StartElement startElement, QName attributeQName)
    • getAttributeValue

      public static String getAttributeValue(StartElement startElement, String attributeName, String defaultValue)
      Retrieves the value of the specified attribute name on the specified start element.
      Parameters:
      startElement - start element
      attributeName - attribute name
      Returns:
      attribute value or default value if attribute does not exist
    • getAttributeValue

      public static String getAttributeValue(StartElement startElement, QName attributeQName, String defaultValue)
      Retrieves the value of the specified attribute name on the specified start element.
      Parameters:
      startElement - start element
      attributeQName - attribute QName
      Returns:
      attribute value or default value if attribute does not exist
    • hasAttributes

      public static boolean hasAttributes(StartElement startElement, String... attributeNames)
      Returns true if start element has all the specified attributes.
      Parameters:
      startElement - start element
      attributeNames - attribute names
      Returns:
      true if start element has all the specified attributes, false otherwise.
    • hasClass

      public static boolean hasClass(StartElement startElement, String className)
      Parameters:
      startElement -
      className -
      Returns:
      true if the supplied startElement has an HTML class attribute containing the supplied class name.
    • collectWhitespace

      public static String collectWhitespace(XMLEventReader reader) throws XMLStreamException
      Collect whitespace from the given reader. Useful for conditional inclusion in parsed results.
      Parameters:
      reader - the reader
      Returns:
      the whitespace
      Throws:
      XMLStreamException - if there are problems reading from the supplied reader
    • collectWhitespace

      public static StringBuilder collectWhitespace(StringBuilder builder, XMLEventReader reader) throws XMLStreamException
      Collect whitespace from the given reader, into the given builder. Useful for conditional inclusion in parsed results.
      Parameters:
      builder - the builder
      reader - the reader
      Returns:
      the given builder
      Throws:
      XMLStreamException - if there are problems reading from the supplied reader
    • skipWhitespace

      public static void skipWhitespace(XMLEventReader reader) throws XMLStreamException
      Skip whitespace from the given reader. Useful for unconditionally ignoring whitespace in parsed results.
      Parameters:
      reader - the reader
      Throws:
      XMLStreamException - if there are problems reading from the supplied reader
    • readCharactersAndEntities

      public static String readCharactersAndEntities(XMLEventReader reader) throws XMLStreamException
      Read all characters and entities from the supplied reader until a non-character or non-entity event is read. At this point the stream will be left with the next event being this terminating event.
      Parameters:
      reader - the reader to read from, with the current event being either a character or an entity
      Returns:
      a String including all characters and entities read.
      Throws:
      XMLStreamException - if there are problems reading from the supplied reader
    • toString

      @Deprecated public static String toString(XMLEventReader reader)
    • toXmlString

      public static String toXmlString(XMLEventReader reader, XmlOutputFactory xmlOutputFactory)
    • toXmlStringWithoutTag

      public static String toXmlStringWithoutTag(XMLEventReader reader, XmlOutputFactory xmlOutputFactory, Set<QName> ignoredElements)
      Reads an XML stream and turns it into a string while removing any tags matched in ignoredElements
      Parameters:
      reader - The XML event reader
      xmlOutputFactory - The XML output factory
      ignoredElements - A set of tags that should be stripped from the output
      Returns:
      A string representation of the XML document with the specified tags removed.
    • flushEventWriter

      public static void flushEventWriter(XMLEventWriter eventWriter) throws XMLStreamException
      Ensure all xml events that have been added to the event buffer of the writer are flushed.

      You want to be using this instead of XMLEventWriter.flush() when:

    • you have just written the start element to the event stream
    • plan to then write the body of the element directly to the underlying writer
    • If you want to do this, you need this method to append the closing angle bracket of the start element.

      You want to do in preparation for writing to the underlying writer directly.

      Parameters:
      eventWriter - the event writer
      Throws:
      XMLStreamException
    • splitCData

      public static List<String> splitCData(String data)

      Take a String and split into multiple substrings where each substring is suitable to be written as CData.

      You would use this method when you want to write CDATA to an XML document and you need to be sure that the content you are writing doesn't contain a CDATA closing triad (]]>) which would cause a premature closing of the CDATA.

      So as an example if you supply a String like <![CDATA[stuff]]> then the returned Strings would be

      1. <![CDATA[stuff]]
      2. >
      The final > would close the CDATA so is returned in a separate String. Both these returned Strings can be safely written to CDATA sections in a document.

      If the supplied String is already safe for writing to a CDATA section then a single item List will be returned containing the supplied String.

      Parameters:
      data - the data to be made safe for writing to a CDATA section.
      Returns:
      a list of one or more items where each item is safe to be written to a separate CDATA sections.
    • convertToXhtmlException

      public static XhtmlException convertToXhtmlException(com.ctc.wstx.exc.WstxLazyException ex)
      Take a WstxLazyException as a parameter and return the appropriate XhtmlException for the Woodstox exception supplied.
      Parameters:
      ex - the Woodstox exception to be converted to an XhtmlException.
      Returns:
      an XhtmlParsingException if the WstxLazyException is wrapping a WstxParsingException, otherwise an XhtmlException
    • processWrappedWstxExceptionOrTrowMapped

      public static <E extends XhtmlException> E processWrappedWstxExceptionOrTrowMapped(RuntimeException ex, Function<RuntimeException,E> transformer)
      New version of the woodstox parser sometimes throws Wstx* exceptions wrapped into the RuntimeException. This method tries to unwrap such exceptions and handle them in the same way as convertToXhtmlException(WstxLazyException) does. If it turns out that given RuntimeException is not a wrapper of any of Wstx* exceptions, method uses provided transformer to convert given runtime exception into a XhtmlException
      Parameters:
      ex - runtime exception
      transformer - function to transform given runtime exception into the instance of XhtmlException, if it doesn't wrap any of Wstx* exceptions
      Returns:
      istance of XhtmlException
    • isWrappedAnyWstxException

      public static boolean isWrappedAnyWstxException(RuntimeException ex)
      Check if the given RuntimeException is a wrapper for any of Wstx* exceptions
      Parameters:
      ex - RuntimeException to test
      Returns:
      true if given RuntimeException is a wrapper for any of Wstx* exceptions, false otherwise
    • stripIllegalControlChars

      public static @NonNull CharSequence stripIllegalControlChars(@NonNull CharSequence unclean)
      Removes control characters from a CharSequence so that it can be parsed by a Stax parser. The xml spec defines what characters an XML processor must accept:
      Legal characters are tab, carriage return, line feed, and the legal characters of Unicode and ISO/IEC 10646
      XML Charsets.

      This method only removes illegal control chars, and doesn't attempt to remove illegal Unicode characters.

      Parameters:
      unclean -
      Returns:
      the supplied CharSequence with illegal control characters stripped