[123911] Added extension mechanism to the XML validator for error customizers. Contributed an initial J2EE error customizer that provides a 'nicer' message for empty application projects. Added unit tests for error customizer extension.
diff --git a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF index 5752afe..e4488b8 100644 --- a/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.wst.xml.core/META-INF/MANIFEST.MF
@@ -26,6 +26,7 @@ org.eclipse.wst.xml.core.internal.contentmodel.util, org.eclipse.wst.xml.core.internal.contenttype, org.eclipse.wst.xml.core.internal.document, + org.eclipse.wst.xml.core.internal.emf2xml, org.eclipse.wst.xml.core.internal.encoding, org.eclipse.wst.xml.core.internal.modelhandler, org.eclipse.wst.xml.core.internal.modelquery, @@ -48,11 +49,11 @@ org.eclipse.wst.xml.core.internal.validation, org.eclipse.wst.xml.core.internal.validation.core, org.eclipse.wst.xml.core.internal.validation.core.logging, + org.eclipse.wst.xml.core.internal.validation.eclipse, + org.eclipse.wst.xml.core.internal.validation.errorcustomization, org.w3c.dom, org.w3c.dom.ranges, - org.w3c.dom.traversal, - org.eclipse.wst.xml.core.internal.emf2xml - + org.w3c.dom.traversal Require-Bundle: org.apache.xerces;visibility:=reexport, org.eclipse.wst.sse.core, org.eclipse.core.resources,
diff --git a/bundles/org.eclipse.wst.xml.core/plugin.properties b/bundles/org.eclipse.wst.xml.core/plugin.properties index e1cdf41..837cda4 100644 --- a/bundles/org.eclipse.wst.xml.core/plugin.properties +++ b/bundles/org.eclipse.wst.xml.core/plugin.properties
@@ -22,4 +22,5 @@ XML_Catalog_Contributions_Extension_Point.name=XML Catalog Contributions Extension Point XML_Catalog_Contributor_Extension_Point.name=XML Catalog Contributor Extension Point XSL_Content_Type_Extension_Element.name=XSL -XMI_Content_Type=XMI \ No newline at end of file +XMI_Content_Type=XMI +XML_Validation_Error_Customizer.name=XML Validator Error Customizer Extension Point \ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xml.core/plugin.xml b/bundles/org.eclipse.wst.xml.core/plugin.xml index d721dbe..4a8f4c4 100644 --- a/bundles/org.eclipse.wst.xml.core/plugin.xml +++ b/bundles/org.eclipse.wst.xml.core/plugin.xml
@@ -2,6 +2,10 @@ <?eclipse version="3.0"?> <plugin> + <!-- An extension for contributing a XML validation error customizer. --> + <extension-point id="errorCustomizer" name="%XML_Validation_Error_Customizer.name" schema="schema/errorCustomizer.exsd"/> + + <extension point="org.eclipse.wst.sse.core.modelHandler"> <modelHandler default="true"
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/XMLValidator.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/XMLValidator.java index 5a8a307..103f874 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/XMLValidator.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/XMLValidator.java
@@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; - import org.apache.xerces.impl.XMLErrorReporter; import org.apache.xerces.parsers.StandardParserConfiguration; import org.apache.xerces.xni.NamespaceContext; @@ -37,11 +36,14 @@ import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver; import org.eclipse.wst.xml.core.internal.validation.core.LazyURLInputStream; import org.eclipse.wst.xml.core.internal.validation.core.logging.LoggerFactory; +import org.eclipse.wst.xml.core.internal.validation.errorcustomization.ErrorCustomizationManager; +import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; import org.xml.sax.ext.DeclHandler; +import org.xml.sax.helpers.DefaultHandler; /** * This class performs validation using a xerces sax parser. @@ -53,6 +55,7 @@ { protected URIResolver uriResolver = null; //protected MyEntityResolver entityResolver = null; + protected ErrorCustomizationManager errorCustomizationManager; protected Hashtable ingoredErrorKeyTable = new Hashtable(); protected static final String IGNORE_ALWAYS = "IGNORE_ALWAYS"; //$NON-NLS-1$ @@ -116,6 +119,25 @@ reader.setFeature("http://xml.org/sax/features/namespaces", valinfo.isNamespaceEncountered()); //$NON-NLS-1$ reader.setFeature("http://xml.org/sax/features/validation", valinfo.isGrammarEncountered()); //$NON-NLS-1$ reader.setFeature("http://apache.org/xml/features/validation/schema", valinfo.isGrammarEncountered()); //$NON-NLS-1$ + reader.setContentHandler(new DefaultHandler() + { + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + + if (errorCustomizationManager == null) + { + errorCustomizationManager = new ErrorCustomizationManager(); +// if (errorCustomizationManager.isDocumentNamespaceApplicable(uri)) +// { +// errorCustomizationManager.setActive(true); +// } + } + errorCustomizationManager.startElement(uri, localName); + } + + public void endElement(String uri, String localName, String qName) throws SAXException { + errorCustomizationManager.endElement(uri, localName); + } + }); // MH make sure validation works even when a customer entityResolver is note set (i.e. via setURIResolver()) if (entityResolver != null) @@ -544,6 +566,7 @@ if (reportError) { super.reportError(domain, key, arguments, severity); + errorCustomizationManager.considerReportedError(valinfo, key, arguments); } } };
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/ValidationMessage.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/ValidationMessage.java index 807ea9a..d364d24 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/ValidationMessage.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/core/ValidationMessage.java
@@ -191,5 +191,11 @@ { return this.messageArguments; } + + + public void setMessage(String message) + { + this.message = message; + } }
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/ErrorCustomizationPluginRegistryReader.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/ErrorCustomizationPluginRegistryReader.java index 27e9674..ab6c170 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/ErrorCustomizationPluginRegistryReader.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/eclipse/ErrorCustomizationPluginRegistryReader.java
@@ -68,7 +68,7 @@ { try { - Bundle pluginBundle = Platform.getBundle(element.getDeclaringExtension().getContributor().getName()); + Bundle pluginBundle = Platform.getBundle(element.getDeclaringExtension().getNamespace()); ErrorMessageCustomizerDelegate delegate = new ErrorMessageCustomizerDelegate(pluginBundle, errorCustomizerClass); ErrorCustomizationRegistry.getInstance().addErrorMessageCustomizer(namespace, delegate); }
diff --git a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/errorcustomization/ElementInformation.java b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/errorcustomization/ElementInformation.java index 649c99e..eb1cca2 100644 --- a/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/errorcustomization/ElementInformation.java +++ b/bundles/org.eclipse.wst.xml.core/src-validation/org/eclipse/wst/xml/core/internal/validation/errorcustomization/ElementInformation.java
@@ -69,4 +69,4 @@ { return children; } -} \ No newline at end of file +}
diff --git a/bundles/org.eclipse.wst.xml.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.xml.ui/META-INF/MANIFEST.MF index a2bcfb9..8c3d7af 100644 --- a/bundles/org.eclipse.wst.xml.ui/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.wst.xml.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wst.xml.ui; singleton:=true -Bundle-Version: 1.0.1.qualifier +Bundle-Version: 1.0.2.qualifier Bundle-Activator: org.eclipse.wst.xml.ui.internal.XMLUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin
diff --git a/bundles/org.eclipse.wst.xml.ui/src-validation/org/eclipse/wst/xml/ui/internal/validation/XMLValidator.java b/bundles/org.eclipse.wst.xml.ui/src-validation/org/eclipse/wst/xml/ui/internal/validation/XMLValidator.java index 0f67568..1f3cb21 100644 --- a/bundles/org.eclipse.wst.xml.ui/src-validation/org/eclipse/wst/xml/ui/internal/validation/XMLValidator.java +++ b/bundles/org.eclipse.wst.xml.ui/src-validation/org/eclipse/wst/xml/ui/internal/validation/XMLValidator.java
@@ -15,6 +15,7 @@ import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolverPlugin; import org.eclipse.wst.xml.core.internal.validation.XMLValidationReport; +import org.eclipse.wst.xml.core.internal.validation.eclipse.ErrorCustomizationPluginRegistryReader; /** * An XML validator specific to Eclipse. This validator will wrap the internal @@ -50,6 +51,7 @@ { validator = new org.eclipse.wst.xml.core.internal.validation.XMLValidator(); validator.setURIResolver(URIResolverPlugin.createResolver()); + new ErrorCustomizationPluginRegistryReader().readRegistry(); } /** * Validate the file at the given URI.