public FastInfosetConnector(StAXDocumentParser fastInfosetStreamReader, XmlVisitor visitor) { super(visitor); fastInfosetStreamReader.setStringInterning(true); this.fastInfosetStreamReader = fastInfosetStreamReader; }
@Override public void text(String value, boolean needsSeparatingWhitespace) throws IOException { if (needsSeparatingWhitespace) fiout.writeLowLevelText(" "); fiout.writeLowLevelText(value); }
public void set() { ch = fastInfosetStreamReader.getTextCharacters(); start = fastInfosetStreamReader.getTextStart(); length = fastInfosetStreamReader.getTextLength(); }
private void handleFragmentedCharacters() throws XMLStreamException, SAXException { buffer.setLength(0); // Append characters of first character event buffer.append(fastInfosetStreamReader.getTextCharacters(), fastInfosetStreamReader.getTextStart(), fastInfosetStreamReader.getTextLength()); // Consume all character while(true) { switch(fastInfosetStreamReader.peekNext()) { case XMLStreamConstants.START_ELEMENT : processBufferedText(true); return; case XMLStreamConstants.END_ELEMENT : processBufferedText(false); return; case XMLStreamConstants.CHARACTERS : case XMLStreamConstants.CDATA : case XMLStreamConstants.SPACE : // Append characters of second and subsequent character events fastInfosetStreamReader.next(); buffer.append(fastInfosetStreamReader.getTextCharacters(), fastInfosetStreamReader.getTextStart(), fastInfosetStreamReader.getTextLength()); break; default: fastInfosetStreamReader.next(); } } }
private void handleStartElement() throws SAXException { processUnreportedText(); for (int i = 0; i < fastInfosetStreamReader.accessNamespaceCount(); i++) { visitor.startPrefixMapping(fastInfosetStreamReader.getNamespacePrefix(i), fastInfosetStreamReader.getNamespaceURI(i)); } tagName.uri = fastInfosetStreamReader.accessNamespaceURI(); tagName.local = fastInfosetStreamReader.accessLocalName(); tagName.atts = fastInfosetStreamReader.getAttributesHolder(); visitor.startElement(tagName); }
private void processNonIgnorableText() throws SAXException { textReported = true; boolean isTextAlgorithmAplied = (fastInfosetStreamReader.getTextAlgorithmBytes() != null); if (isTextAlgorithmAplied && fastInfosetStreamReader.getTextAlgorithmIndex() == EncodingAlgorithmIndexes.BASE64) { base64Data.set(fastInfosetStreamReader.getTextAlgorithmBytesClone(),null); visitor.text(base64Data); } else { if (isTextAlgorithmAplied) { fastInfosetStreamReader.getText(); } charArray.set(); visitor.text(charArray); } }
@Override public void beginStartTag(int prefix, String localName) throws IOException { fiout.writeLowLevelTerminationAndMark(); int type = EncodingConstants.ELEMENT; if (nsContext.getCurrent().count() > 0) { final NamespaceContextImpl.Element nse = nsContext.getCurrent(); fiout.writeLowLevelStartNamespaces(); for (int i = nse.count() - 1; i >= 0; i--) { final String uri = nse.getNsUri(i); if (uri.length() == 0 && nse.getBase() == 1) continue; // no point in definint xmlns='' on the root fiout.writeLowLevelNamespace(nse.getPrefix(i), uri); } fiout.writeLowLevelEndNamespaces(); type= 0; } final boolean isIndexed = fiout.writeLowLevelStartElement( type, nsContext.getPrefix(prefix), localName, nsContext.getNamespaceURI(prefix)); if (!isIndexed) tables.incrementMaxIndexValue(); }
private void handleEndElement() throws SAXException { processUnreportedText(); tagName.uri = fastInfosetStreamReader.accessNamespaceURI(); tagName.local = fastInfosetStreamReader.accessLocalName(); visitor.endElement(tagName); for (int i = fastInfosetStreamReader.accessNamespaceCount() - 1; i >= 0; i--) { visitor.endPrefixMapping(fastInfosetStreamReader.getNamespacePrefix(i)); } }
@Override public void attribute(Name name, String value) throws IOException { fiout.writeLowLevelStartAttributes(); final int qNameIndex = tables.attributeIndexes[name.qNameIndex] - tables.indexOffset; if (qNameIndex >= 0) { fiout.writeLowLevelAttributeIndexed(qNameIndex); } else { tables.attributeIndexes[name.qNameIndex] = fiout.getNextAttributeIndex() + tables.indexOffset; final int namespaceURIId = name.nsUriIndex; if (namespaceURIId == -1) { writeLiteral(EncodingConstants.ATTRIBUTE_LITERAL_QNAME_FLAG, name, "", ""); } else { final int prefix = nsUriIndex2prefixIndex[namespaceURIId]; writeLiteral(EncodingConstants.ATTRIBUTE_LITERAL_QNAME_FLAG, name, nsContext.getPrefix(prefix), nsContext.getNamespaceURI(prefix)); } } fiout.writeLowLevelAttributeValue(value); }
@Override public void attribute(int prefix, String localName, String value) throws IOException { fiout.writeLowLevelStartAttributes(); boolean isIndexed; if (prefix == -1) isIndexed = fiout.writeLowLevelAttribute("", "", localName); else isIndexed = fiout.writeLowLevelAttribute( nsContext.getPrefix(prefix), nsContext.getNamespaceURI(prefix), localName); if (!isIndexed) tables.incrementMaxIndexValue(); fiout.writeLowLevelAttributeValue(value); } }
@Override public void beginStartTag(Name name) throws IOException { fiout.writeLowLevelTerminationAndMark(); if (nsContext.getCurrent().count() == 0) { final int qNameIndex = tables.elementIndexes[name.qNameIndex] - tables.indexOffset; final int prefixIndex = nsUriIndex2prefixIndex[name.nsUriIndex]; if (qNameIndex >= 0 && tables.elementIndexPrefixes[name.qNameIndex] == prefixIndex) { fiout.writeLowLevelStartElementIndexed(EncodingConstants.ELEMENT, qNameIndex); } else { tables.elementIndexes[name.qNameIndex] = fiout.getNextElementIndex() + tables.indexOffset; tables.elementIndexPrefixes[name.qNameIndex] = prefixIndex; writeLiteral(EncodingConstants.ELEMENT | EncodingConstants.ELEMENT_LITERAL_QNAME_FLAG, name, nsContext.getPrefix(prefixIndex), nsContext.getNamespaceURI(prefixIndex)); } } else { beginStartTagWithNamespaces(name); } }
private void writeLiteral(int type, Name name, String prefix, String namespaceURI) throws IOException { final int localNameIndex = tables.localNameIndexes[name.localNameIndex] - tables.indexOffset; if (localNameIndex < 0) { tables.localNameIndexes[name.localNameIndex] = fiout.getNextLocalNameIndex() + tables.indexOffset; fiout.writeLowLevelStartNameLiteral( type, prefix, localNames[name.localNameIndex].buf, namespaceURI); } else { fiout.writeLowLevelStartNameLiteral( type, prefix, localNameIndex, namespaceURI); } }
@Override public void text(Pcdata value, boolean needsSeparatingWhitespace) throws IOException { if (needsSeparatingWhitespace) fiout.writeLowLevelText(" "); /* * Check if the CharSequence is from a base64Binary data type */ if (!(value instanceof Base64Data)) { final int len = value.length(); if(len <buf.length) { value.writeTo(buf, 0); fiout.writeLowLevelText(buf, len); } else { fiout.writeLowLevelText(value.toString()); } } else { final Base64Data dataValue = (Base64Data)value; // Write out the octets using the base64 encoding algorithm fiout.writeLowLevelOctets(dataValue.get(), dataValue.getDataLen()); } }
protected Location getCurrentLocation() { return fastInfosetStreamReader.getLocation(); }
@Override public void endTag(Name name) throws IOException { fiout.writeLowLevelEndElement(); }
@Override public void endStartTag() throws IOException { fiout.writeLowLevelEndStartElement(); }
protected String getCurrentQName() { return fastInfosetStreamReader.getNameString(); }
@Override public void startDocument(XMLSerializer serializer, boolean fragment, int[] nsUriIndex2prefixIndex, NamespaceContextImpl nsContext) throws IOException, SAXException, XMLStreamException { super.startDocument(serializer, fragment, nsUriIndex2prefixIndex, nsContext); if (fragment) fiout.initiateLowLevelWriting(); }
private void processIgnorableText() throws SAXException { boolean isTextAlgorithmAplied = (fastInfosetStreamReader.getTextAlgorithmBytes() != null); if (isTextAlgorithmAplied && fastInfosetStreamReader.getTextAlgorithmIndex() == EncodingAlgorithmIndexes.BASE64) { base64Data.set(fastInfosetStreamReader.getTextAlgorithmBytesClone(),null); visitor.text(base64Data); textReported = true; } else { if (isTextAlgorithmAplied) { fastInfosetStreamReader.getText(); } charArray.set(); if (!WhiteSpaceProcessor.isWhiteSpace(charArray)) { visitor.text(charArray); textReported = true; } } }
@Override public void endTag(int prefix, String localName) throws IOException { fiout.writeLowLevelEndElement(); }