All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.aalto.sax.SAXParserFactoryImpl Maven / Gradle / Ivy

There is a newer version: 1.3.3
Show newest version
/* Woodstox Lite ("wool") XML processor
 *
 * Copyright (c) 2006- Tatu Saloranta, [email protected]
 *
 * Licensed under the License specified in the file LICENSE which is
 * included with the source code.
 * You may not use this file except in compliance with the License.
 *
 * 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 com.fasterxml.aalto.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;

import com.fasterxml.aalto.stax.InputFactoryImpl;

/**
 * This is implementation of the main JAXP SAX factory, and as such
 * acts as the entry point from JAXP.
 *

* Note: most of the SAX features are not configurable as of yet. * However, effort is made to recognize all existing standard features * and properties, to allow using code to figure out existing * capabilities automatically. */ public class SAXParserFactoryImpl extends SAXParserFactory { final InputFactoryImpl mStaxFactory; public SAXParserFactoryImpl() { // defaults should be fine... mStaxFactory = new InputFactoryImpl(); } // As per [Issue#4], let's re-define this method /** * @since 0.9.8 */ public static SAXParserFactory newInstance() { return new SAXParserFactoryImpl(); } @Override public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException { // Standard feature? SAXFeature stdFeat = SAXUtil.findStdFeature(name); if (stdFeat != null) { // fixed? Boolean b = SAXUtil.getFixedStdFeatureValue(stdFeat); if (b != null) { return b.booleanValue(); } // ok, may change: switch (stdFeat) { case IS_STANDALONE: // read-only, but only during parsing return true; default: } } else { // any non-standard one we may support? } // nope, not recognized: SAXUtil.reportUnknownFeature(name); return false; // never gets here } @Override public SAXParser newSAXParser() { return new SAXParserImpl(mStaxFactory); } @Override public void setFeature(String name, boolean enabled) throws SAXNotRecognizedException, SAXNotSupportedException { // Standard feature? SAXFeature stdFeat = SAXUtil.findStdFeature(name); if (stdFeat != null) { boolean ok; switch (stdFeat) { case EXTERNAL_GENERAL_ENTITIES: ok = !enabled; break; case EXTERNAL_PARAMETER_ENTITIES: ok = !enabled; break; case IS_STANDALONE: // read-only... ok = true; break; case LEXICAL_HANDLER_PARAMETER_ENTITIES: ok = true; // won't be able to handle PEs, so this is n/a break; case NAMESPACES: // can't disable ok = enabled; break; case NAMESPACE_PREFIXES: // can't enable: ok = !enabled; break; case RESOLVE_DTD_URIS: // n/a for now ok = true; break; case STRING_INTERNING: /* Can not disable; however, doesn't harm if they try to * do it, so let's not care */ ok = true; break; case UNICODE_NORMALIZATION_CHECKING: // not implemented as of yet, maybe never ok = false; break; case USE_ATTRIBUTES2: // read-only case USE_LOCATOR2: // read-only case USE_ENTITY_RESOLVER2: // read-only // read-only, who cares: ok = true; break; case VALIDATION: // validation not yet implemented ok = !enabled; break; case XMLNS_URIS: // without disabling ns-processing, irrelevant: ok = true; break; case XML_1_1: // not yet implemented ok = !enabled; break; default: // should never happen... ok = false; } if (!ok) { throw new SAXNotSupportedException("Setting std feature "+stdFeat+" to "+enabled+" not supported"); } return; } // any non-standard one we may support? // nope, not recognized: SAXUtil.reportUnknownFeature(name); } @Override public void setNamespaceAware(boolean awareness) { if (!awareness) { throw new IllegalArgumentException("Non-namespace-aware mode not implemented"); } super.setNamespaceAware(awareness); } @Override public void setValidating(boolean value) { if (value) { throw new IllegalArgumentException("Validating mode not implemented"); } super.setValidating(value); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy