/** * Copyright 2011-2012 Alexandre Dutra * * Licensed 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 fr.dutra.confluence2wordpress.util; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.CONFLUENCE_XHTML_NAMESPACE_ALTERNATE_PREFIX; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.CONFLUENCE_XHTML_NAMESPACE_PREFIX; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.CONFLUENCE_XHTML_NAMESPACE_URI; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.RESOURCE_IDENTIFIER_NAMESPACE_PREFIX; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.RESOURCE_IDENTIFIER_NAMESPACE_URI; import static com.atlassian.confluence.content.render.xhtml.XhtmlConstants.XHTML_NAMESPACE_URI; import java.io.IOException; import java.io.StringReader; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import org.apache.commons.io.IOUtils; import com.atlassian.confluence.core.ContentEntityObject; public class StaxUtils { /** * @see com.atlassian.confluence.content.render.xhtml.DefaultXmlEventReaderFactory */ private static final XMLInputFactory INPUT_FACTORY; static { INPUT_FACTORY = XMLInputFactory.newInstance(); INPUT_FACTORY.setProperty("javax.xml.stream.supportDTD", Boolean.TRUE); INPUT_FACTORY.setProperty("javax.xml.stream.isCoalescing", Boolean.FALSE); INPUT_FACTORY.setProperty("javax.xml.stream.isReplacingEntityReferences", Boolean.FALSE); INPUT_FACTORY.setProperty("com.ctc.wstx.normalizeAttrValues", Boolean.FALSE); //javax.xml.stream.resolver } private static final String XHTML_LAT1_DTD; private static final String XHTML_SPECIAL_DTD; private static final String XHTML_SYMBOL_DTD; static { String xhtml_lat1 = null; try { xhtml_lat1 = IOUtils.toString(StaxUtils.class.getResourceAsStream("/dtd/xhtml-lat1.ent")); } catch (IOException e) { } XHTML_LAT1_DTD = xhtml_lat1; String xhtml_special = null; try { xhtml_special = IOUtils.toString(StaxUtils.class.getResourceAsStream("/dtd/xhtml-special.ent")); } catch (IOException e) { } XHTML_SPECIAL_DTD = xhtml_special; String xhtml_symbol = null; try { xhtml_symbol = IOUtils.toString(StaxUtils.class.getResourceAsStream("/dtd/xhtml-symbol.ent")); } catch (IOException e) { } XHTML_SYMBOL_DTD = xhtml_symbol; } private static final String XML_START = "<!DOCTYPE storage [" + XHTML_LAT1_DTD + XHTML_SPECIAL_DTD + XHTML_SYMBOL_DTD + "]>" + "<xml " + "xmlns=\"" + XHTML_NAMESPACE_URI + "\" " + "xmlns:"+CONFLUENCE_XHTML_NAMESPACE_PREFIX+"=\""+CONFLUENCE_XHTML_NAMESPACE_URI+"\" "+ "xmlns:"+CONFLUENCE_XHTML_NAMESPACE_ALTERNATE_PREFIX+"=\""+CONFLUENCE_XHTML_NAMESPACE_URI+"\" "+ "xmlns:"+RESOURCE_IDENTIFIER_NAMESPACE_PREFIX+"=\""+RESOURCE_IDENTIFIER_NAMESPACE_URI+"\" " + ">" ; private static final String XML_END = "</xml>" ; public static XMLEventReader getReader(ContentEntityObject page) throws XMLStreamException{ return getXMLEventReader(page.getBodyAsString()); } public static XMLEventReader getXMLEventReader(String storage) throws XMLStreamException { return INPUT_FACTORY.createXMLEventReader(getReader(storage)); } public static StringReader getReader(String storage) throws XMLStreamException { return new StringReader(XML_START + storage + XML_END); } }