diff options
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/xsd/InlineSchemaValidator.java')
-rw-r--r-- | bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/xsd/InlineSchemaValidator.java | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/xsd/InlineSchemaValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/xsd/InlineSchemaValidator.java deleted file mode 100644 index aec05ba01..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/wsdl/xsd/InlineSchemaValidator.java +++ /dev/null @@ -1,241 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2002-2005 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 - Initial API and implementation - *******************************************************************************/ -package org.eclipse.wst.wsi.internal.core.wsdl.xsd; - -import java.util.HashMap; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import javax.wsdl.Definition; -import javax.wsdl.Types; -import javax.wsdl.extensions.UnknownExtensibilityElement; - -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -import com.ibm.wsdl.Constants; - -/** - * Plugin validator for the WSDL Validation framework. Validates inline schema found in a WSDL document. - * - * @author Lawrence Mandel (lmandel@ca.ibm.com) - */ -public class InlineSchemaValidator -{ - List elements = null; - - - public Map validate(Object element, List parents, String filename) throws Exception - { - elements = new Vector(); - UnknownExtensibilityElement elem = (UnknownExtensibilityElement) element; - Definition wsdlDefinition = (Definition) parents.get(parents.size() - 1); - // Add in the namespaces defined in the doc already that aren't defined locally in this schema. - // There is no need to check for namespaces other then in the defintions and types elements as - // inline schema can not have any other parents and must have there two parents. - // First take care of the definitions element - - // create the inline schema string - Element w3celement = elem.getElement(); - Hashtable parentnamespaces = getNamespaceDeclarationsFromParents(wsdlDefinition,w3celement); - String targetNamespace = w3celement.getAttribute(Constants.ATTR_TARGET_NAMESPACE); - // if the targetNamespace hasn't been defined for the schema use the - // targetNamespace of the definitions element - /*if(targetNamespace == null || targetNamespace.equals("")) - { - targetNamespace = wsdlDefinition.getTargetNamespace(); - w3celement.setAttribute(Constants.ATTR_TARGET_NAMESPACE,targetNamespace); - }*/ - - String xsd = InlineSchemaGenerator.createXSDString(w3celement, elements, filename, parentnamespaces); - - // If the namespace given is one of the old schema namespaces produce a warning. - String namespace = w3celement.getNamespaceURI(); - if(namespace.equals(Constants.NS_URI_XSD_1999) || namespace.equals(Constants.NS_URI_XSD_2000)) - { - throw new Exception("An old version of the schema namespace is specified."); - } - - // now create and call the validator for the inline schema - XSDValidator schemav = new XSDValidator(); - - //String fileLocation = new URL(validatormanager.getFilename()).getPath(); - InlineXSDResolver inlineEntityResolver = - getEntityResolver(wsdlDefinition, (Types) parents.get(0), filename, targetNamespace); - // add in the external XSD Catalog to resolve schemas offline - XMLEntityResolverChain entityResolverChain = new XMLEntityResolverChain(); - entityResolverChain.addEntityResolver(inlineEntityResolver); - entityResolverChain.addEntityResolver(new FileEntityResolver()); - entityResolverChain.addEntityResolver(XMLCatalogResolver.getInstance()); - schemav.validateInlineSchema(xsd, targetNamespace, filename, entityResolverChain, inlineEntityResolver); - - // check if the SOAP Encoding namespace is required but not imported - if (InlineSchemaGenerator.soapEncodingRequiredNotImported(elem.getElement(), filename,parentnamespaces)) - { - throw new Exception("The inline schema uses an element or type from " - + "the SOAP encoding namespace but the namespace has not been imported. " - + "The SOAP encoding namespace should be imported with an import " - + "statement before it is used."); - } - - // If the schema isn't valid - if (!schemav.isValid()) - { - // Gathering all the errors - StringBuffer exception = new StringBuffer(); - Iterator i = schemav.getErrors().iterator(); - while (i.hasNext()) - { - exception.append(i.next()).append('\n'); - } - // throw an exception - throw new Exception(exception.toString()); - } - // if the schema is valid - else - { - Map map = new HashMap(1); - map.put(targetNamespace, schemav.getXSModel()); - return map; - } - } - - /** - * Get an entity resolver that will resolve inline schemas. Every inline schema is preregistered with - * the resolver. - * - * @param wsdlDefinition The WSDL definitions element. - * @param types The types element. - * @param referenceLocation The location of the file that contains this schema. - * @param targetNamespace The targetNamespace of the schema. - * @return An entity resolver that can resolve inline schemas. - */ - protected InlineXSDResolver getEntityResolver(Definition wsdlDefinition, Types types, String referenceLocation, String targetNamespace) - { - InlineXSDResolver entityResolver = new InlineXSDResolver(); -// entityResolver.setReferenceLocation(referenceLocation); - List schemas = types.getExtensibilityElements(); - if (schemas != null) - { - Iterator iSchemas = schemas.iterator(); - while (iSchemas.hasNext()) - { - UnknownExtensibilityElement extElem = (UnknownExtensibilityElement) iSchemas.next(); - String thisNamespace = extElem.getElement().getAttribute(Constants.ATTR_TARGET_NAMESPACE); - if (thisNamespace != null && !thisNamespace.equalsIgnoreCase(targetNamespace)) - { - - Element element = extElem.getElement(); - -// create the inline schema string - //Element w3celement = elem.getElement(); - Hashtable parentnamespaces = getNamespaceDeclarationsFromParents(wsdlDefinition,element); - String xsd = InlineSchemaGenerator.createXSDString(element, elements, referenceLocation, parentnamespaces); - //addNamespaceDeclarationsFromParents(wsdlDefinition,element); - entityResolver.add(thisNamespace, xsd); - } - - } - } - return entityResolver; - } - - /** - * Get the namespace declarations as in the form - * xmlns="somenamespace" - * from the definitions and types elements and add them to the schema element so the schema - * validator will have access to them. - * - * @param wsdlDefinition The WSDL definitions element. - * @param element The types element. - * @return A hashtable with the namespace elements from the elements provided. - */ - protected Hashtable getNamespaceDeclarationsFromParents(Definition wsdlDefinition, Element element) - { - Hashtable nss = new Hashtable(); - Iterator nameSpaces = wsdlDefinition.getNamespaces().keySet().iterator(); - - String XMLNS = Constants.ATTR_XMLNS; - - while (nameSpaces.hasNext()) - { - String nsprefix = XMLNS; - String ns = (String) nameSpaces.next(); - if (!ns.equalsIgnoreCase("")) - { - nsprefix += ":"; - } - if (!element.hasAttribute(nsprefix + ns)) - { - nss.put(nsprefix + ns, wsdlDefinition.getNamespace(ns)); -// element.setAttribute(nsprefix + ns, wsdlDefinition.getNamespace(ns)); - } - - } - // Next handle the parent types element - NamedNodeMap atts = element.getParentNode().getAttributes(); - int attslength = atts.getLength(); - for (int i = 0; i < attslength; i++) - { - Node tempnode = atts.item(i); - String nodename = tempnode.getNodeName(); - // if this is a namespace attribute - if (nodename.indexOf(XMLNS) != -1) - { - nss.put(nodename, tempnode.getNodeValue()); - //element.setAttribute(nodename, tempnode.getNodeValue()); - } - } - return nss; - } - - /** - * Given a line number for the schema returns the element found on that line. - * Useful for obtaining elements from schema Strings. - * - * @param line The line number for the schema. - * @return The object located at the line or at line 0 if the line is invalid. - */ - public Object getObjectAtLine(int line) - { - if(line < 0 || line >= elements.size()) - { - line = 0; - } - return elements.get(line); - } - - /** - * Replace any instance of the 2001 schema namespace in the given message with - * the given namespace. - * - * @param message The message to replace the namespace in. - * @param namespace The namespace used for replacement. - * @return The message with the 2001 schema namespace replaced by the given namespace. - */ - // private String replaceNamespace(String message, String namespace) - // { - // String xsd2001 = Constants.NS_URI_XSD_2001; - // int start = message.indexOf(xsd2001); - // int end = start + xsd2001.length(); - // if(start < 0) - // { - // return message; - // } - // String startString = message.substring(0,start); - // String endString = message.substring(end,message.length()); - // return startString + namespace + endString; - // } -} |