/** * Verify that the given URI is indeed a valid extension namespace URI, and if so enable it. * * <p>This method does all the error handling. */ protected final void checkAndEnable(String uri) throws SAXException { if (!isRecognizableExtension(uri)) { String nearest = EditDistance.findNearest(uri, recognizableExtensions); // not the namespace URI we know of error(Messages.ERR_UNSUPPORTED_EXTENSION.format(uri, nearest)); } else if (!isSupportedExtension(uri)) { // recognizable but not not supported, meaning // the plug-in isn't enabled // look for plug-in that handles this URI Plugin owner = null; for (Plugin p : options.getAllPlugins()) { if (p.getCustomizationURIs().contains(uri)) { owner = p; break; } } if (owner != null) // we know the plug-in that supports this namespace, but it's not enabled error(Messages.ERR_PLUGIN_NOT_ENABLED.format(owner.getOptionName(), uri)); else { // this shouldn't happen, but be defensive... error(Messages.ERR_UNSUPPORTED_EXTENSION.format(uri)); } } // as an error recovery enable this namespace URI anyway. enabledExtensions.add(uri); }
/** @param handler This error handler will receive detected errors. */ public AbstractExtensionBindingChecker( String schemaLanguage, Options options, ErrorHandler handler) { this.schemaLanguage = schemaLanguage; this.allowExtensions = options.compatibilityMode != Options.STRICT; this.options = options; setErrorHandler(handler); for (Plugin plugin : options.getAllPlugins()) recognizableExtensions.addAll(plugin.getCustomizationURIs()); recognizableExtensions.add(Const.XJC_EXTENSION_URI); }
/** * If the tag name belongs to a plugin namespace-wise, check its local name to make sure it's * correct. */ protected final void verifyTagName(String namespaceURI, String localName, String qName) throws SAXException { if (options.pluginURIs.contains(namespaceURI)) { // make sure that this is a valid tag name boolean correct = false; for (Plugin p : options.activePlugins) { if (p.isCustomizationTagName(namespaceURI, localName)) { correct = true; break; } } if (!correct) { error(Messages.ERR_ILLEGAL_CUSTOMIZATION_TAGNAME.format(qName)); startCutting(); } } }