/** * The contents of this file are subject to the Mozilla Public License * Version 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * The Original Code is available at https://abicloud.svn.sourceforge.net/svnroot/abicloud * * The Initial Developer of the Original Code is Soluciones Grid, S.L. (www.abiquo.com), * Consell de Cent 296 principal 2ยบ, 08007 Barcelona, Spain. * No portions of the Code have been created by third parties. * All Rights Reserved. * * Contributor(s): ______________________________________. * * Graphical User Interface of this software may be used under the terms * of the Common Public Attribution License Version 1.0 (the "CPAL License", * available at http://cpal.abiquo.com), in which case the provisions of CPAL * License are applicable instead of those above. In relation of this portions * of the Code, a Legal Notice according to Exhibits A and B of CPAL Licence * should be provided in any distribution of the corresponding Code to Graphical * User Interface. */ package com.abiquo.ovf.xml; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLOutputFactory; import org.codehaus.stax2.XMLInputFactory2; import org.codehaus.stax2.XMLOutputFactory2; import com.ctc.wstx.api.WstxOutputProperties; import com.ctc.wstx.stax.WstxInputFactory; import com.ctc.wstx.stax.WstxOutputFactory; /** * Factories to configure the StAX implementation used on XML communication. * * @see http://woodstox.codehaus.org/ (4.0 release notes) Default setting of IS_COALESCING *changed * to false* * Default setting of WstxOutputProperties.P_OUTPUT_FIX_CONTENT *changed to false* * * "no prefix" and "no namespace [URI]" have been changed from null value to empty String * ("") */ public final class Stax2Factory { /** The singleton instance. */ private static Stax2Factory instance; /** Factory to obtain new StAX XML readers (implements XMLInputFactory). */ private final WstxInputFactory inputFact; /** Factory to obtain new StAX XML writers (implements XMLOutputFactory). */ private final WstxOutputFactory outputFact; /** Enable XMLStreamReader to uses name spaces. */ private final boolean isNamespaceAware = true; /** * Property that determines whether Carriage Return (\r) characters are to be escaped when * output or not. If enabled, all instances of of character \r are escaped using a character * entity (where possible, that is, within CHARACTERS events, and attribute values). Otherwise * they are output as is. The main reason to enable this property is to ensure that carriage * returns are preserved as is through parsing, since otherwise they will be converted to * canonical xml linefeeds (\n), when occuring along or as part of \r\n pair. */ private final boolean isEscapingOutputCR = false; /** Configure Woodstox as StAX XML implementation (actually stax2). */ static { final String inputFactoryImpl = "com.ctc.wstx.stax.WstxInputFactory"; final String outputFactoryImpl = "com.ctc.wstx.stax.WstxOutputFactory"; final String eventFactoryImpl = "com.ctc.wstx.stax.WstxEventFactory"; System.setProperty("javax.xml.stream.XMLInputFactory", inputFactoryImpl); System.setProperty("javax.xml.stream.XMLOutputFactory", outputFactoryImpl); System.setProperty("javax.xml.stream.XMLEventFactory", eventFactoryImpl); } /** * Configure and creates the factories instances. */ private Stax2Factory() { inputFact = (WstxInputFactory) XMLInputFactory.newInstance(); outputFact = (WstxOutputFactory) XMLOutputFactory.newInstance(); inputFact.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, isNamespaceAware); inputFact.setProperty(XMLInputFactory2.P_REPORT_PROLOG_WHITESPACE, Boolean.FALSE); outputFact.setProperty(WstxOutputProperties.P_OUTPUT_ESCAPE_CR, isEscapingOutputCR); } /** * Return the singleton output factory to get XML writers configured to StAX. * * @return The output factory. */ public static XMLOutputFactory2 getStreamWriterFactory() { synchronized (Stax2Factory.class) { if (instance == null) { instance = new Stax2Factory(); } } return instance.outputFact; } /** * Returns the singleton input factory to get XML readers configured to StAX. * * @return The input factory. */ public static XMLInputFactory2 getStreamReaderFactory() { synchronized (Stax2Factory.class) { if (instance == null) { instance = new Stax2Factory(); } } return instance.inputFact; } }