Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/ui/ant/WSDLValidate.java')
-rw-r--r--bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/ui/ant/WSDLValidate.java458
1 files changed, 458 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/ui/ant/WSDLValidate.java b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/ui/ant/WSDLValidate.java
new file mode 100644
index 000000000..5ad53d9c2
--- /dev/null
+++ b/bundles/org.eclipse.wst.wsdl.validation/src/org/eclipse/wst/wsdl/validation/internal/ui/ant/WSDLValidate.java
@@ -0,0 +1,458 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.wst.wsdl.validation.internal.ui.ant;
+
+import java.io.File;
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.DTDLocation;
+import org.apache.tools.ant.types.FileSet;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.XMLCatalog;
+import org.eclipse.wst.wsdl.validation.internal.IValidationMessage;
+import org.eclipse.wst.wsdl.validation.internal.IValidationReport;
+import org.eclipse.wst.wsdl.validation.internal.WSDLValidator;
+import org.eclipse.wst.wsdl.validation.internal.WSDLValidatorDelegate;
+import org.eclipse.wst.wsdl.validation.internal.resolver.URIResolverDelegate;
+import org.eclipse.wst.wsdl.validation.internal.util.MessageGenerator;
+import org.eclipse.wst.wsdl.validation.internal.wsdl11.WSDL11ValidatorDelegate;
+
+/**
+ * An Ant task to run WSDL validation on a file or a set of files.
+ *
+ * Options
+ * - file - the file to run validation on (optional if fileset is used)
+ * - failonerror - fail the build process on the first file with an error
+ * - wsicompliance - how to report WS-I errors - REQUIRE, SUGGEST, IGNORE (defaults to REQUIRE)
+ *
+ * Supported Nested Elements
+ * - xmlcatalog - an xml catalog
+ * - dtd - a dtd specification as would appear in an xmlcatalog
+ * - schema - a schema specification as would appear in an xmlcatalog
+ * - entity - an entity specification as would appear in an xmlcatalog
+ * - fileset - a set of files to validate
+ * - wsdl11validator - an extension WSDL 1.1 validator
+ * - uriresolver - an extension URI resolver
+ *
+ */
+public class WSDLValidate extends Task
+{
+ protected final String UI_PROPERTIES = "validatewsdlui";
+ protected final String VALIDATOR_PROPERTIES = org.eclipse.wst.wsdl.validation.internal.Constants.WSDL_VALIDATOR_PROPERTIES_FILE;
+ protected final String _ERROR_NO_FILE_SPECIFIED = "_ERROR_NO_FILE_SPECIFIED";
+ protected final String _UI_INFORMATION_DELIMITER = "_UI_INFORMATION_DELIMITER";
+ protected final String _UI_ACTION_VALIDATING_FILE = "_UI_ACTION_VALIDATING_FILE";
+ protected final String _UI_ERROR_MARKER = "_UI_ERROR_MARKER";
+ protected final String _UI_WARNING_MARKER = "_UI_WARNING_MARKER";
+ protected final String _UI_VALID = "_UI_VALID";
+ protected final String _UI_INVALID = "_UI_INVALID";
+ protected final String _EXC_UNABLE_TO_VALIDATE_FILE = "_EXC_UNABLE_TO_VALIDATE_FILE";
+ protected final String _EXC_WSDL_FAIL_ON_ERROR = "_EXC_WSDL_FAIL_ON_ERROR";
+
+ protected final String FILE_PROTOCOL = "file:///";
+
+ // Global Vars
+ protected List filesets = new ArrayList();
+ protected String file = null;
+ protected Path classpath;
+ protected String xsdDirectory = null;
+ protected boolean failOnError = false;
+ protected XMLCatalog globalXMLCatalog = new XMLCatalog();
+ protected List wsdl11validators = new ArrayList();
+ protected List extvalidators = new ArrayList();
+ protected List extURIResolvers = new ArrayList();
+
+ /**
+ * Constuctor.
+ */
+ public WSDLValidate()
+ {
+ }
+
+ /**
+ * Tells the WSDL validate task to fail the build if an error is encountered.
+ *
+ * @param failOnError Whether to fail on error or not.
+ */
+ public void setFailOnError(boolean failOnError)
+ {
+ this.failOnError = failOnError;
+ }
+
+ /**
+ * Set the directory where the base schema files for the catalog are located.
+ *
+ * @param dir - the directory of the base schema files
+ */
+ public void setSchemaDir(String dir)
+ {
+ xsdDirectory = dir;
+ }
+
+ /**
+ * Set a file to run WSDL validation on.
+ *
+ * @param file - a file to run validation on
+ */
+ public void setFile(String file)
+ {
+ this.file = file;
+ }
+
+ /**
+ * Create a set of files to run WSDL validation on.
+ *
+ * @return the FileSet of files to run WSDL validation on
+ */
+ public FileSet createFileset()
+ {
+ FileSet fileset = new FileSet();
+ filesets.add(fileset);
+ return fileset;
+ }
+
+ /**
+ * Add an XML catalog to the validator.
+ *
+ * @param catalog - the catalog to add to the validator
+ */
+ public void addConfiguredXMLCatalog(XMLCatalog catalog)
+ {
+ globalXMLCatalog.addConfiguredXMLCatalog(catalog);
+ }
+ /**
+ * Add an extension validator.
+ *
+ * @param extVal The extension validator to add.
+ */
+ public void addConfiguredExtensionValidator(ExtensionValidator extVal)
+ {
+ extvalidators.add(extVal);
+ }
+ /**
+ * Add an extension WSDL 1.1 validator.
+ *
+ * @param extVal The extension WSDL 1.1 validator to add.
+ */
+ public void addConfiguredWSDL11Validator(ExtensionValidator extVal)
+ {
+ wsdl11validators.add(extVal);
+ }
+
+ /**
+ * Allow specification of an entity outside of an XMLCatalog.
+ *
+ * @return a DTDLocation with the specified entity
+ **/
+ public DTDLocation createEntity()
+ {
+ DTDLocation dtdLoc = new DTDLocation();
+ globalXMLCatalog.addEntity(dtdLoc);
+ return dtdLoc;
+ }
+
+ /**
+ * Allow specification of a DTD outside of an XMLCatalog.
+ *
+ * @return a DTDLocation with the specified DTD
+ **/
+ public DTDLocation createDTD()
+ {
+ DTDLocation dtdLoc = new DTDLocation();
+ globalXMLCatalog.addEntity(dtdLoc);
+ return dtdLoc;
+ }
+
+ /**
+ * Create a URIResolver extension.
+ *
+ * @return A URIResolver.
+ */
+ public URIResolver createURIResolver()
+ {
+ URIResolver urires = new URIResolver();
+ extURIResolvers.add(urires.getClassName());
+ return urires;
+
+ }
+
+ /**
+ * Get a list of all the files to run WSDL validation on. Takes the file and fileset
+ * and creates the list.
+ *
+ * @return the list of files to be validated
+ */
+ protected List getFileList()
+ {
+ List files = new ArrayList();
+
+ // if a specific file was specified add it to the list
+ if (file != null)
+ {
+ try
+ {
+ URL url = new URL(file);
+ files.add(url.toExternalForm());
+ }
+ catch(Exception e)
+ {
+ File theFile = new File(file);
+ if(!theFile.isAbsolute())
+ {
+ theFile = new File(getProject().getBaseDir(), file);
+ }
+ String absFile = theFile.toString();
+ if(!absFile.startsWith("file:"))
+ {
+ absFile = FILE_PROTOCOL + absFile;
+ }
+ absFile = absFile.replace('\\','/');
+ files.add(absFile);
+ }
+ }
+
+ // go through all filesets specified and add all the files to the list
+ Iterator fsIter = filesets.iterator();
+ while (fsIter.hasNext())
+ {
+ FileSet fileset = (FileSet)fsIter.next();
+ DirectoryScanner ds = fileset.getDirectoryScanner(fileset.getProject());
+ String basedir = ds.getBasedir().toString() + File.separator;
+
+ String[] filelist = ds.getIncludedFiles();
+ int numFiles = filelist.length;
+ if (files != null && numFiles > 0)
+ {
+ for (int i = 0; i < numFiles; i++)
+ {
+ String absFile = FILE_PROTOCOL + basedir + filelist[i];
+ absFile = absFile.replace('\\','/');
+ files.add(absFile);
+ }
+ }
+ }
+ return files;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.tools.ant.Task#execute()
+ */
+ public void execute() throws BuildException
+ {
+ // the resource bundles for the ui and validator are needed
+ MessageGenerator messGen = null;
+ try
+ {
+ ResourceBundle uiRB = ResourceBundle.getBundle(UI_PROPERTIES);
+ messGen = new MessageGenerator(uiRB);
+ }
+ catch (MissingResourceException e)
+ {
+ // if the resource bundles can't be opened we can't report error so throw an exception
+ throw new BuildException("Unable to open resource bundle. " + e);
+ }
+
+ // Set the XML catalog.
+ org.eclipse.wst.wsdl.validation.internal.xml.XMLCatalog.setExtensionXMLCatalog(XMLCatalogImpl.class.getName(), getClass().getClassLoader());
+ XMLCatalogImpl xmlCatalog = (XMLCatalogImpl)org.eclipse.wst.wsdl.validation.internal.xml.XMLCatalog.getExtensionCatalogInstance();
+ xmlCatalog.addXMLCatalog(globalXMLCatalog);
+
+ WSDLValidator wsdlValidator = new WSDLValidator();
+
+ // Set the extension URIResolvers.
+ Iterator resolversIter = extURIResolvers.iterator();
+ while(resolversIter.hasNext())
+ {
+ String resolverClass = (String)resolversIter.next();
+ wsdlValidator.addURIResolver(new URIResolverDelegate(resolverClass, getClass().getClassLoader()).getURIResolver());
+ }
+
+ // Get the list of files to validate.
+ List files = getFileList();
+
+ // Register the WSDL 1.1 extension validators.
+ Iterator wsdl11extIter = wsdl11validators.iterator();
+ while(wsdl11extIter.hasNext())
+ {
+ ExtensionValidator extVal = (ExtensionValidator)wsdl11extIter.next();
+ WSDL11ValidatorDelegate delegate = new WSDL11ValidatorDelegate(extVal.getClassName(), extVal.getResourceBundle());
+ wsdlValidator.registerWSDL11Validator(extVal.getNamespace(), delegate);
+ }
+
+ // Register the extension validators.
+ Iterator extIter = extvalidators.iterator();
+ while(extIter.hasNext())
+ {
+ ExtensionValidator extVal = (ExtensionValidator)extIter.next();
+ WSDLValidatorDelegate delegate = new WSDLValidatorDelegate(extVal.getClassName(), extVal.getResourceBundle());
+ wsdlValidator.registerWSDLExtensionValidator(extVal.getNamespace(), delegate);
+ }
+
+ // The user didn't specify any files to validate.
+ if (files == null || files.isEmpty())
+ {
+ System.err.println(messGen.getString(_ERROR_NO_FILE_SPECIFIED));
+ return;
+ }
+
+ if (xsdDirectory != null)
+ {
+ org.eclipse.wst.wsdl.validation.internal.xml.XMLCatalog.addSchemaDir(xsdDirectory);
+ }
+
+ // Validate all the files specified.
+ Iterator iFiles = files.iterator();
+
+ // Common strings needed in validation output.
+ String infoDelim = messGen.getString(_UI_INFORMATION_DELIMITER);
+ String valid = messGen.getString(_UI_VALID);
+ String invalid = messGen.getString(_UI_INVALID);
+ String errormarker = messGen.getString(_UI_ERROR_MARKER);
+ String warningmarker = messGen.getString(_UI_WARNING_MARKER);
+
+ StringBuffer result = null;
+ boolean notvalid = true;
+ while (iFiles.hasNext())
+ {
+ result = new StringBuffer();
+ notvalid = false;
+ String filename = (String)iFiles.next();
+ try
+ {
+ result.append(infoDelim).append("\n");
+ result.append(messGen.getString(_UI_ACTION_VALIDATING_FILE, filename)).append(" - ");
+
+ IValidationReport valReport = wsdlValidator.validate(filename);
+
+ IValidationMessage[] messages = valReport.getValidationMessages();
+
+ if (!valReport.hasErrors())
+ {
+ result.append(valid);
+ }
+ else
+ {
+ result.append(invalid);
+ notvalid = true;
+ }
+ result.append("\n").append(infoDelim).append("\n");
+
+ result.append(reportMessages(messages, errormarker, warningmarker));
+
+ System.out.println(result.toString());
+ }
+ catch (Exception e)
+ {
+ System.err.println(messGen.getString(_EXC_UNABLE_TO_VALIDATE_FILE, filename, e));
+ }
+ finally
+ {
+ if (notvalid && failOnError)
+ {
+ // To fail on error, throw a build exception.
+ throw new BuildException(messGen.getString(_EXC_WSDL_FAIL_ON_ERROR));
+ }
+ }
+ }
+
+ org.eclipse.wst.wsdl.validation.internal.xml.XMLCatalog.reset();
+
+ }
+
+ /**
+ * Return a string with formatted output for the messages.
+ *
+ * @param messages The messages to report.
+ * @param errormarker The marker to use for error messages.
+ * @param warningmarker The marker to use for warning messages.
+ * @return A string with the formatted output.
+ */
+ protected String reportMessages(IValidationMessage[] messages, String errormarker, String warningmarker)
+ {
+ StringBuffer returnBuffer = new StringBuffer();
+
+ if (messages == null)
+ return returnBuffer.toString();
+
+ String prefix = null;
+ int numMessages = messages.length;
+ for(int i = 0; i < numMessages; i++)
+ {
+ IValidationMessage message = messages[i];
+
+ if(message.getSeverity() == IValidationMessage.SEV_ERROR)
+ {
+ prefix = errormarker;
+ }
+ else if(message.getSeverity() == IValidationMessage.SEV_WARNING)
+ {
+ prefix = warningmarker;
+ }
+ else
+ {
+ prefix = "";
+ }if(message.getSeverity() == IValidationMessage.SEV_ERROR)
+ {
+ prefix = errormarker;
+ }
+ else if(message.getSeverity() == IValidationMessage.SEV_WARNING)
+ {
+ prefix = warningmarker;
+ }
+ else
+ {
+ prefix = "";
+ }if(message.getSeverity() == IValidationMessage.SEV_ERROR)
+ {
+ prefix = errormarker;
+ }
+ else if(message.getSeverity() == IValidationMessage.SEV_WARNING)
+ {
+ prefix = warningmarker;
+ }
+ else
+ {
+ prefix = "";
+ }if(message.getSeverity() == IValidationMessage.SEV_ERROR)
+ {
+ prefix = errormarker;
+ }
+ else if(message.getSeverity() == IValidationMessage.SEV_WARNING)
+ {
+ prefix = warningmarker;
+ }
+ else
+ {
+ prefix = "";
+ }
+ returnBuffer
+ .append(prefix)
+ .append(" ")
+ .append(message.getLine())
+ .append(":")
+ .append(message.getColumn())
+ .append(":")
+ .append(message.getMessage())
+ .append("\n");
+ }
+ return returnBuffer.toString();
+ }
+} \ No newline at end of file

Back to the top