diff options
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml')
14 files changed, 0 insertions, 3162 deletions
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLConvertor.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLConvertor.java deleted file mode 100644 index 82b134cbc..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLConvertor.java +++ /dev/null @@ -1,69 +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.xml; - -import java.io.FileOutputStream; - -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -/** - * This class converts a XML document using an XSL file. - * - * @version 1.0.1 - * @author Peter Brittenham (peterbr@us.ibm.com) - */ -public class XMLConvertor -{ - - /** - * Transforms an XML document using an XSL file. - * @param args arguments for main. - */ - public static void main(String[] args) - { - try - { - if (args.length < 3) - { - System.out.println( - "Usage: XMLConvertor <xslFile> <inXMLFile> <outFile>"); - } - - else - { - // Get transformer - Transformer transformer = - TransformerFactory.newInstance().newTransformer( - new StreamSource(args[0])); - - // Transform the XML document using the specificed XSL file - transformer.transform( - new StreamSource(args[1]), - new StreamResult(new FileOutputStream(args[2]))); - - // Display results - System.out.println( - "Created " + args[2] + " from " + args[0] + " and " + args[1] + "."); - } - } - - catch (Exception e) - { - e.printStackTrace(); - } - - System.exit(0); - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCache.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCache.java deleted file mode 100644 index 41087524a..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCache.java +++ /dev/null @@ -1,77 +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.xml; - -import java.util.HashMap; -import java.util.Map; - -/** - * This class creates a HashMap to cache XML documents. - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public class XMLDocumentCache extends HashMap -{ - static XMLDocumentCache instance; - - /** - * Comment for <code>serialVersionUID</code> - */ - private static final long serialVersionUID = 3834028043709657401L; - - /** - * Constructor for XMLDocumentCache. - * @param initialCapacity the initial capacity. - * @param loadFactor the load factor. - */ - public XMLDocumentCache(int initialCapacity, float loadFactor) - { - super(initialCapacity, loadFactor); - instance = this; - } - - /** - * Constructor for XMLDocumentCache. - * @param initialCapacity the initial capacity. - */ - public XMLDocumentCache(int initialCapacity) - { - super(initialCapacity); - instance = this; - } - - /** - * Constructor for XMLDocumentCache. - */ - public XMLDocumentCache() - { - super(); - instance = this; - } - - /** - * Constructor for XMLDocumentCache. - * @param t the map whose mappings are to be placed in this map. - */ - public XMLDocumentCache(Map t) - { - super(t); - instance = this; - } - - public static XMLDocumentCache instance() - { - if (instance == null) - instance = new XMLDocumentCache(); - - return instance; - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCacheUser.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCacheUser.java deleted file mode 100644 index a50f07e31..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLDocumentCacheUser.java +++ /dev/null @@ -1,117 +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.xml; - -import java.net.URL; - -import org.eclipse.wst.wsi.internal.core.WSIException; -import org.w3c.dom.Document; - -/** - * This is an abstract class that takes advantage of cached XML documents. - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ - -public abstract class XMLDocumentCacheUser -{ - /** - * Get document from cache. - * @see #setDocument - * - * @param key a String. - * @return a Document object corresponding to the key. - */ - protected Document getDocument(String key) - { - return (Document) XMLDocumentCache.instance().get(key); - } - - /** - * Put document with corresponding key in cache. - * @see #getDocument - * - * @param key a String used as a key to identify specified document. - * @param document a document. - */ - protected void setDocument(String key, Object document) - { - XMLDocumentCache.instance().put(key, document); - } - - /** - * Get document list. - * @return a XMLDocumentCache object representing the document list value. - */ - public XMLDocumentCache getDocumentList() - { - return XMLDocumentCache.instance(); - } - - /** - * Parse XML document. - * @param urlString a String locating the XML document. - * @param baseURI a base url to assist in locating the XML document. - * @return a Document object. - * @throws WSIException if document cannot be parsed. - */ - public Document parseXMLDocumentURL(String urlString, String baseURI) - throws WSIException - { - return parseXMLDocumentURL(urlString, baseURI, null); - } - - /** - * Parse XML document and validate with a schema document. - * @param urlString a String locating the XML document. - * @param baseURI a base url to assist in locating the XML document. - * @param schema a String identifying related schema document. - * @return a Document object. - * @throws WSIException if document cannot be parsed. - */ - public Document parseXMLDocumentURL( - String urlString, - String baseURI, - String schema) - throws WSIException - { - Document document = null; - - try - { - // Create URL reference to document - URL url = XMLUtils.createURL(urlString, baseURI); - - // TODO: Add schema to the xml document cache, so that you can detect when it has already - // been parsed using a specific schema definition - - // If the document is not in the cache, then read and parse it - if ((document = getDocument(urlString)) == null) - { - document = XMLUtils.parseXMLDocumentURL(url, schema); - // Add document to cache - setDocument(urlString, document); - } - } - - catch (WSIException e) - { - throw e; - } - - catch (Exception e) - { - throw new WSIException(e.getMessage(), e); - } - - return document; - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTags.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTags.java deleted file mode 100644 index e12d04f0c..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTags.java +++ /dev/null @@ -1,60 +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.xml; - -import javax.xml.namespace.QName; - -/** - * This class contains information on XML tags. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public interface XMLTags -{ - /** - * Namespaces. - */ - public final static String NS_URI_XSI = - "http://www.w3.org/2001/XMLSchema-instance"; - public final static String NS_URI_XMLNS = "http://www.w3.org/2000/xmlns/"; - public final static String NS_URI_XSD = "http://www.w3.org/2001/XMLSchema"; - public final static String XSD_SCHEMALOCATION = - "http://www.w3.org/2001/XMLSchema.xsd"; - - /** - * Qualified names of XSD elements and attributes. - */ - public final static QName ELEM_XSD_ANNOTATION = - new QName(NS_URI_XSD, "annotation"); - public final static QName ELEM_XSD_IMPORT = new QName(NS_URI_XSD, "import"); - public final static QName ELEM_XSD_INCLUDE = new QName(NS_URI_XSD, "include"); - public final static QName ELEM_XSD_SCHEMA = new QName(NS_URI_XSD, "schema"); - public final static QName ELEM_XSD_ELEMENT = new QName(NS_URI_XSD, "element"); - public final static QName ELEM_XSD_ATTRIBUTE = - new QName(NS_URI_XSD, "attribute"); - public final static QName ELEM_XSD_COMPLEXTYPE = - new QName(NS_URI_XSD, "complexType"); - - public final static QName ATTR_XSI_TYPE = new QName(NS_URI_XSI, "type"); - public final static QName ATTR_XSI_NIL = new QName(NS_URI_XSI, "nil"); - - public final static QName ATTR_XSD_NAME = new QName(NS_URI_XSD, "name"); - public final static QName ATTR_XSD_TYPE = new QName(NS_URI_XSD, "type"); - public final static QName ATTR_XSD_BASE = new QName(NS_URI_XSD, "base"); - public final static QName ATTR_XSD_NAMESPACE = - new QName(NS_URI_XSD, "namespace"); - public final static QName ATTR_XSD_SCHEMALOCATION = - new QName(NS_URI_XSD, "schemaLocation"); - public final static QName ATTR_XSD_TARGETNAMESPACE = - new QName(NS_URI_XSD, "targetNamespace"); - -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTraversal.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTraversal.java deleted file mode 100644 index f6233f0db..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLTraversal.java +++ /dev/null @@ -1,129 +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.xml; - -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Entity; -import org.w3c.dom.EntityReference; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.Notation; -import org.w3c.dom.ProcessingInstruction; -import org.w3c.dom.Text; - -/** - * We don't have access to the node source code, so this does - * our double-dispatch the hard way. - */ -public abstract class XMLTraversal extends XMLVisitor -{ - /** - * Returning false from action would terminates traversal. - * However, this always returns true. -- a no-op. - * @param n - an XML node. - * @return always true. - */ - public boolean action(Node n) - { - return true; - } - - public void visit(CDATASection s) - { - action(s); - } - - public void visit(Document e) - { - if (action(e)) - { - // This does visit DocumentType, which is considered a child Node. - for (Node n = e.getFirstChild(); n != null; n = n.getNextSibling()) - { - doVisit(n); - } - } - } - - public void visit(DocumentType type) - { - if (action(type)) - { - visit(type.getEntities()); - visit(type.getNotations()); - } - } - - public void visit(Attr e) - { - action(e); - } - - public void visit(Element node) - { - if (action(node)) - { - visit(node.getAttributes()); - for (Node n = node.getFirstChild(); n != null; n = n.getNextSibling()) - { - doVisit(n); - } - } - } - - public void visit(Comment e) - { - action(e); - } - - public void visit(Text e) - { - action(e); - } - - public void visit(EntityReference e) - { - action(e); - } - - public void visit(Entity e) - { - action(e); - } - - public void visit(Notation n) - { - action(n); - } - - public void visit(ProcessingInstruction i) - { - action(i); - } - - public void visit(NamedNodeMap map) - { - if (map != null) - { - for (int i = 0; i < map.getLength(); ++i) - { - doVisit(map.item(i)); - } - } - } -} - -// END OF FILE diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLUtils.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLUtils.java deleted file mode 100644 index 137833d93..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLUtils.java +++ /dev/null @@ -1,1528 +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.xml; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import javax.xml.namespace.QName; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.xml.serialize.OutputFormat; -import org.apache.xml.serialize.XMLSerializer; -import org.eclipse.wst.wsi.internal.core.WSIException; -import org.eclipse.wst.wsi.internal.core.WSITag; -import org.eclipse.wst.wsi.internal.core.util.NullUtil; -import org.w3c.dom.Attr; -import org.w3c.dom.CharacterData; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.SAXParseException; -import org.xml.sax.XMLReader; - -import com.ibm.wsdl.util.StringUtils; - -/** - * Set of XML related utilities. - * - * @version 1.0.1 - * @author Peter Brittenham - */ -public final class XMLUtils -{ - /** - * Some sax features that need to be set. - */ - public static final String FEATURE_NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes"; - public static final String FEATURE_NAMESPACES = "http://xml.org/sax/features/namespaces"; - public static final String FEATURE_VALIDATION_SCHEMA = "http://apache.org/xml/features/validation/schema"; - public static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; - public static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; - public static final String W3C_SOAP_12_SCHEMA = "http://schemas.xmlsoap.org/soap/envelope/"; - public static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; - public static final String PROPERTY_EXTERNAL_SCHEMA_LOCATION = "http://apache.org/xml/properties/schema/external-schemaLocation"; - - public static final String SOAP_ELEM_ENVELOPE = "Envelope"; - public static final String SOAP_ELEM_HEADER = "Header"; - public static final String SOAP_ELEM_BODY = "Body"; - public static final String SOAP_ELEM_FAULT = "Fault"; - public static final String SOAP_ELEM_FAULT_CODE = "faultcode"; - public static final String SOAP_ELEM_FAULT_STRING = "faultstring"; - public static final String SOAP_ELEM_FAULT_DETAIL = "detail"; - public static final String SOAP_ELEM_FAULT_ACTOR = "faultactor"; - public static final String SOAP_ATTR_MUST_UNDERSTAND = "mustUnderstand"; - public static final String SOAP_ATTR_ACTOR = "actor"; - - /** - * Get XMLReader. - * - * @return the XMLReader value - * @throws WSIException if there are problems getting the XMLReader - * implementation. - */ - public static XMLReader getXMLReader() throws WSIException { - XMLReader xmlReader = null; - - try - { - xmlReader = (new org.apache.xerces.jaxp.SAXParserFactoryImpl()) - .newSAXParser().getXMLReader(); - - // Set namespace aware - xmlReader.setFeature(FEATURE_NAMESPACE_PREFIXES, true); - xmlReader.setFeature(FEATURE_NAMESPACES, true); - } - - catch (Exception e) - { - throw new WSIException("Could not get XMLReader implementation.", e); - } - - return xmlReader; - } - - /** - * Parse text string as an XML document and return the document element. - * - * @param text XML document text. - * @param validate true if the document will be validate, false otherwise - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(String text, boolean validate) - throws WSIException { - return parseXML(new StringReader(text), validate); - } - - /** - * Parse text string as an XML document and return the document element. - * - * @param text XML document text. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(String text) throws WSIException { - return parseXML(new StringReader(text)); - } - - /** - * Parse the XML document and return the document element. - * - * @param uri the location of the XML document. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - * @throws IOException if an I/O exception of some sort has occurred. - */ - public static Document parseXMLDocument(String uri) - throws WSIException, IOException - { - return parseXMLDocument(uri, null); - } - - /** - * Parse the XML document and return the document element. - * - * @param uri the location of the XML document. - * @param schema a String identifying related schema document. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - * @throws IOException if an I/O exception of some sort has occurred. - */ - public static Document parseXMLDocument(String uri, String schema) - throws WSIException, IOException - { - URL url = StringUtils.getURL(null, uri); - InputStream inputStream = (InputStream)url.getContent(); - InputSource inputSource = new InputSource(inputStream); - inputSource.setSystemId(url.toString()); - - if (schema == null) - return parseXML(inputSource, false); - else - return parseXML(inputSource, schema); - } - - /** - * Parses an XML document from a reader and returns the document object. - * - * @param url a String locating the XML document. - * @param schema a String identifying related schema document. - * @param baseURI a base url to assist in locating the XML document. - * @return Document. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXMLDocumentURL(String url, String schema, - String baseURI) throws WSIException { - try - { - parseXMLDocumentURL(createURL(url, baseURI), schema); - } - - catch (Exception e) - { - throw new WSIException(e.getMessage(), e); - } - - return parseXMLDocumentURL(url, schema); - } - - /** - * Parses an XML document from a reader and returns the document object. - * - * @param url a URL object identifying the XML document. - * @param schema a String identifying related schema document. - * @return Document. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXMLDocumentURL(URL url, String schema) - throws WSIException { - try - { - InputStream inputStream = (InputStream)url.getContent(); - InputSource inputSource = new InputSource(inputStream); - inputSource.setSystemId(url.toString()); - - Document doc = null; - - if (schema == null) - doc = parseXML(inputSource); - else - doc = parseXML(inputSource, schema); - - inputStream.close(); - return doc; - } - - catch (WSIException e) - { - throw e; - } - - catch (Throwable t) - { - throw new WSIException(t.getMessage()); - } - } - - /** - * Parses an XML document from a reader and returns the document object. - * - * @param urlString a String locating the XML document. - * @param baseURI a base url to assist in locating the XML document. - * @return Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXMLDocumentURL(String urlString, String baseURI) - throws WSIException { - Document document = null; - - try - { - URL url = createURL(urlString, baseURI); - - document = parseXMLDocumentURL(url); - } - - catch (WSIException we) - { - throw we; - } - - catch (Exception e) - { - throw new WSIException(e.getMessage(), e); - } - - return document; - } - - /** - * Parses an XML document from a reader and returns the document object. - * - * @param url a URL object identifying the XML document. - * @return Document. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXMLDocumentURL(URL url) throws WSIException { - Document document = null; - - try - { - Reader reader = new InputStreamReader(url.openStream()); - InputSource source = new InputSource(reader); - source.setSystemId(url.toString()); - document = parseXML(source); - - reader.close(); - } - - catch (Exception e) - { - throw new WSIException(e.getMessage(), e); - } - - return document; - } - - /** - * Parse an XML document from a reader and return the document object. - * - * @param reader a Reader object. - * @param validate true if the document will be validate, false otherwise - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(InputSource source, boolean validate) - throws WSIException { - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - // ADD: This should be set to true when we have access to the schema - // document - factory.setValidating(false); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - doc = builder.parse(source); - // workaround for compatibility Xerces 2.2.1 with Xerces 2.6.2, - // Xerces 2.6.2 supported XML 1.1 but WSI-tool and Xerces 2.2.1 - // supported only XML 1.0 - if (doc instanceof org.apache.xerces.dom.DocumentImpl) - { - if (((org.apache.xerces.dom.DocumentImpl) doc).getXmlVersion().equals( - "1.1")) - { - throw new WSIException("Fatal Error: XML version "1.1" " - + "is not supported, only XML 1.0 is supported."); - } - } - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - // Return document - return doc; - } - - /** - * Parse an XML document from a reader and return the document object. - * - * @param reader a Reader object. - * @param validate true if the document will be validate, false otherwise - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(Reader reader, boolean validate) - throws WSIException { - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // Create input source - InputSource inputSource = new InputSource(reader); - - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - // ADD: This should be set to true when we have access to the schema - // document - factory.setValidating(false); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - doc = builder.parse(inputSource); - // workaround for compatibility Xerces 2.2.1 with Xerces 2.6.2, - // Xerces 2.6.2 supported XML 1.1 but WSI-tool and Xerces 2.2.1 - // supported only XML 1.0 - if (doc instanceof org.apache.xerces.dom.DocumentImpl) - { - if (((org.apache.xerces.dom.DocumentImpl) doc).getXmlVersion().equals( - "1.1")) - { - throw new WSIException("Fatal Error: XML version "1.1" " - + "is not supported, only XML 1.0 is supported."); - } - } - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - // Return document - return doc; - } - - /** - * Parse an XML document from a input source and return the document object. - * - * @param source a InputSource object. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(Reader reader) throws WSIException { - return parseXML(reader, false); - } - - /** - * Parse an XML document from a input source and return the document object. - * - * @param source a InputSource object. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(InputSource source) throws WSIException { - return parseXML(source, false); - } - - /** - * Parse text string as an XML document and return the document element. - * - * @param text XML document text. - * @param schema a String identifying related schema document. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(String text, String schema) - throws WSIException { - return parseXML(new StringReader(text), schema); - } - - /** - * Parse text string as an XML document and return the document element. - * - * @param text XML document text. - * @param schemas a collection of related schema documents. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(String text, Collection schemas) - throws WSIException { - return parseXML(new StringReader(text), schemas); - } - - - /** - * Parse the XML document and return the document element. - * - * @param text XML document text. - * @param schemaString a StringReader object. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - * @throws IOException if an I/O exception of some sort has occurred. - */ - public static Document parseXML(String text, StringReader schemaString) - throws WSIException, IOException { - return parseXML(new StringReader(text), schemaString); - } - - /** - * Parse the XML document and return the document element. - * - * @param reader a Reader object. - * @param schema a String identifying related schema document. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(Reader reader, String schema) - throws WSIException { - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - // Create input source - InputSource inputSource = new InputSource(reader); - - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - try - { - factory.setValidating(false); - factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); - } - catch (IllegalArgumentException e) - { - String errMessage = "Error: JAXP DocumentBuilderFactory attribute not recognized: " - + JAXP_SCHEMA_LANGUAGE - + "\n" - + "Check to see if parser conforms to JAXP 1.2 spec."; - throw new WSIException(errMessage, e); - } - factory.setAttribute(JAXP_SCHEMA_SOURCE, new InputSource(schema)); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(new ErrHandler()); - doc = builder.parse(inputSource); - - // workaround for compatibility Xerces 2.2.1 with Xerces 2.6.2, - // Xerces 2.6.2 supported XML 1.1 but WSI-tool and Xerces 2.2.1 - // supported only XML 1.0 - if (doc instanceof org.apache.xerces.dom.DocumentImpl) - { - if (((org.apache.xerces.dom.DocumentImpl) doc).getXmlVersion().equals("1.1")) - { - throw new WSIException("Fatal Error: XML version "1.1" " - + "is not supported, only XML 1.0 is supported."); - } - } - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - // Return document - return doc; - } - - /** - * Parse the XML document and return the document element. - * - * @param reader a Reader object. - * @param schema a String identifying related schema document. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(InputSource source, String schema) - throws WSIException { - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - factory.setValidating(false); - try - { - factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); - } - - catch (IllegalArgumentException e) - { - String errMessage = "Error: JAXP DocumentBuilderFactory attribute not recognized: " - + JAXP_SCHEMA_LANGUAGE - + "\n" - + "Check to see if parser conforms to JAXP 1.2 spec."; - throw new WSIException(errMessage, e); - } - factory.setAttribute(JAXP_SCHEMA_SOURCE, new InputSource(schema)); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(new ErrHandler()); - doc = builder.parse(source); - - // workaround for compatibility Xerces 2.2.1 with Xerces 2.6.2, - // Xerces 2.6.2 supported XML 1.1 but WSI-tool and Xerces 2.2.1 - // supported only XML 1.0 - if (doc instanceof org.apache.xerces.dom.DocumentImpl) - { - if (((org.apache.xerces.dom.DocumentImpl) doc).getXmlVersion().equals( - "1.1")) - { - throw new WSIException("Fatal Error: XML version "1.1" " - + "is not supported, only XML 1.0 is supported."); - } - } - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - // Return document - return doc; - - } - - /** - * Parse the XML document and return the document element. - * - * @param filename a Reader object. - * @param schemaString a StringReader object. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(Reader filename, StringReader schemaString) - throws WSIException { - - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // Create input source - InputSource inputSource = new InputSource(filename); - - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - factory.setValidating(false); - try - { - factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); - } catch (IllegalArgumentException e) - { - String errMessage = "Error: JAXP DocumentBuilderFactory attribute not recognized: " - + JAXP_SCHEMA_LANGUAGE - + "\n" - + "Check to see if parser conforms to JAXP 1.2 spec."; - throw new WSIException(errMessage, e); - } - factory.setAttribute(JAXP_SCHEMA_SOURCE, new InputSource(schemaString)); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(new ErrHandler()); - doc = builder.parse(inputSource); - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - // Return document - return doc; - - } - - /** - * Parse the XML document and return the document element. - * - * @param filename a Reader object - * @param schemaStrings a collection of related schema documents. - * @return a Document object. - * @throws WSIException if there is a problem parsing the XML document. - */ - public static Document parseXML(Reader filename, Collection schemaStrings) - throws WSIException { - - Document doc = null; - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // Create input source - InputSource inputSource = new InputSource(filename); - - // Get the document factory - DocumentBuilderFactory factory = new org.eclipse.wst.wsi.internal.core.xml.jaxp.DocumentBuilderFactoryImpl(); - - // Set namespace aware, but for now do not validate - factory.setNamespaceAware(true); - factory.setIgnoringElementContentWhitespace(true); - - factory.setValidating(false); - try - { - factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); - } catch (IllegalArgumentException e) - { - String errMessage = "Error: JAXP DocumentBuilderFactory attribute not recognized: " - + JAXP_SCHEMA_LANGUAGE - + "\n" - + "Check to see if parser conforms to JAXP 1.2 spec."; - throw new WSIException(errMessage, e); - } - // convert schema strings to array of InputSources - Iterator i = schemaStrings.iterator(); - Vector readers = new Vector(); - while (i.hasNext()) - { - String nextSchema = (String) i.next(); - readers.add(new InputSource(new StringReader(nextSchema))); - } - InputSource[] inputSources = (InputSource[]) readers - .toArray(new InputSource[]{}); - // pass an array of schema strings (each of which contains a schema) - factory.setAttribute(JAXP_SCHEMA_SOURCE, inputSources); - - // Parse the document - DocumentBuilder builder = factory.newDocumentBuilder(); - builder.setErrorHandler(new ErrHandler()); - doc = builder.parse(inputSource); - } - catch (Exception e) - { - throw new WSIException("Could not parse XML document.", e); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - // Return document - return doc; - - } - - /** - * Get attribute value with the given name defined for the specified element. - * - * @param element an Element object. - * @param attrName a name of an attribute - * @return the attribute value. - */ - public static String getAttributeValue(Element element, String attrName) { - String attrValue = null; - Attr attr = null; - - // Get the attribute using its name - if ((attr = element.getAttributeNode(attrName)) != null) - { - attrValue = attr.getValue().trim(); - } - - // Return attribute value - return attrValue; - } - - /** - * Get attribute value. - * - * @param element an Element object. - * @param attrName a name of an attribute - * @param defaultValue a default value for the specified attribute. - * @return the attribute value if found. Otherwise the specified default - * value. - */ - public static String getAttributeValue(Element element, String attrName, - String defaultValue) { - String returnValue = defaultValue; - String attrValue = null; - - if ((attrValue = getAttributeValue(element, attrName)) != null) - returnValue = attrValue; - - return returnValue; - } - - /** - * Get attribute value. - * - * @param element an Element object. - * @param namespace a namespace. - * @param attrName a name of an attribute - * @return the attribute value. - */ - public static String getAttributeValueNS(Element element, String namespace, - String attrName) { - String attrValue = null; - Attr attr = null; - - // Get the attribute using its name - if ((attr = element.getAttributeNodeNS(namespace, attrName)) != null) - { - attrValue = attr.getValue().trim(); - } - - // Return attribute value - return attrValue; - } - - /** - * Get the first child element from the input elment. - * - * @param element an Element object. - * @return the firstchild element. - */ - public static Element getFirstChild(Element element) { - // Return the first child element - return findNextSibling(element.getFirstChild()); - } - - /** - * Get the next sibling element. - * - * @param element - an Element object. - * @return the next sibling element. - */ - public static Element getNextSibling(Element element) { - // Return next sibling element - return findNextSibling(element.getNextSibling()); - } - - /** - * Find the next sibling element. - * - * @param startNode XML start node. - * @return the next sibling element. - */ - protected static Element findNextSibling(Node startNode) { - Node node = null; - Element returnElement = null; - - // Find the next sibling element - for (node = startNode; node != null && returnElement == null; node = node - .getNextSibling()) - { - // If this node is an element node, then return it - if (node.getNodeType() == Node.ELEMENT_NODE) - { - returnElement = (Element) node; - } - } - - // Return next sibling element - return (Element) returnElement; - } - - /** - * Find the previous sibling element. - * - * @param startNode XML start node. - * @return the previous sibling element. - */ - public static Element findPreviousSibling(Node startNode) { - if (startNode == null) - return null; - - while (startNode != null) - { - startNode = startNode.getPreviousSibling(); - if (startNode == null) - return null; - if (startNode.getNodeType() == Node.ELEMENT_NODE) - return (Element) startNode; - } - - return null; - } - - /** - * Get the text that is associated with this element. - * - * @param element an Element object. - * @return the text that is associated with this element. - */ - public static String getText(Element element) { - String text = null; - - // Get first child element - Node node = element.getFirstChild(); - - // NodeList nodeList = element.getChildNodes(); - - // int length = nodeList.getLength(); - - // Process while there are nodes and the text hasn't been found - while ((node != null) && (text == null)) - { - // If a text node or cdata section is found, then get text - if ((node.getNodeType() == Node.TEXT_NODE) - || (node.getNodeType() == Node.CDATA_SECTION_NODE)) - { - text = ((CharacterData) node).getData(); - } - - // Get next sibling - node = node.getNextSibling(); - } - - if (text != null) - text = text.trim(); - - return text; - } - - /** - * Determine if an element is represented by the QName. - * - * @param qname a QName object. - * @param element an Element object. - * @return true if an element is represented by the QName. - */ - public static boolean equals(QName qname, Element element) { - boolean equals = false; - - // If both the namespace URI and local name are the same, then they are - // equal - if ((qname.getNamespaceURI().equals(element.getNamespaceURI())) - && (qname.getLocalPart().equals(element.getLocalName()))) - { - equals = true; - } - - return equals; - } - - /** - * XML encode a text string. - * - * @param text - a String. - * @return an XML encoded text string. - */ - public static String xmlEscapedString(String text) - { - if (text == null) return text; - else - { - StringBuffer sb = new StringBuffer(text.length()*2); - int size = text.length(); - for (int i=0; i<size; i++) - { - char c = text.charAt(i); - switch (c) - { - case '<': - sb.append("<"); - break; - case '>': - sb.append(">"); - break; - case '&': - sb.append("&"); - break; - case '"': - sb.append("""); - break; - case '\'': - sb.append("'"); - break; - case '\r': - sb.append("
"); - break; - default: - sb.append(c); - } - } - return sb.toString(); - } - } - - /** - * XML encode a text string. - * - * @param text - a String. - * @return an XML encoded text string. - */ - public static String xmlRemoveEscapedString(String text) - { - if (text == null) return text; - else - { - StringBuffer sb = new StringBuffer(text); - - int i = sb.indexOf("
"); - while(i != -1) - { - sb.replace(i, i+5, "\r"); - i = sb.indexOf("
"); - } - - i = sb.indexOf("<"); - while(i != -1) - { - sb.replace(i, i+4, "<"); - i = sb.indexOf("<"); - } - - i = sb.indexOf(">"); - while(i != -1) - { - sb.replace(i, i+4, ">"); - i = sb.indexOf(">"); - } - - i = sb.indexOf("""); - while(i != -1) - { - sb.replace(i, i+6, "\""); - i = sb.indexOf("""); - } - - i = sb.indexOf("'"); - while(i != -1) - { - sb.replace(i, i+6, "\'"); - i = sb.indexOf("'"); - } - - i = sb.indexOf("&"); - while(i != -1) - { - sb.replace(i, i+5, "&"); - i = sb.indexOf("&"); - } - return sb.toString(); - } - } - /** - * Get the specified element from a parent element. - * - * @param elementName the element tag to serach for. - * @param parentElement the parent element. - * @return an element given the name and the parent element. - */ - public static Element getElement(String elementName, Element parentElement) { - Element returnElement = null; - NodeList nl; - - // Get the list of elements - if ((nl = parentElement.getElementsByTagName(elementName)) != null) - { - // Return first element found - returnElement = (Element) nl.item(0); - } - - // Return element - return returnElement; - } - - /** - * Determine if this element matches specified local name in the specified - * namespace. - * - * @param element an Element object. - * @param namespaceURI a namespace. - * @param localName a local name. - * @return true if this element matches specified local name in the specified - * namespace. - */ - public static boolean isElement(Element element, String namespaceURI, - String localName) { - boolean isElement = false; - - if (element != null) - { - // Check is - if (element.getNamespaceURI().equals(namespaceURI) - && element.getLocalName().equals(localName)) - { - isElement = true; - } - } - - return isElement; - } - - /** - * Determine if this element matches specified local name in the specified - * namespace. - * - * @param element an Element object. - * @param namespaceURIs a list of valid namespaces. - * @param localName a local name. - * @return true if this element matches specified local name in the specified - * namespace. - */ - public static boolean isElement(Element element, List namespaceURIs, - String localName) { - boolean isElement = false; - - if (element != null) - { - // Check is - if (namespaceURIs.contains(element.getNamespaceURI()) - && element.getLocalName().equals(localName)) - { - isElement = true; - } - } - - return isElement; - } - - /** - * Get element text as a boolean. - * - * @param element an Element object. - * @param defaultValue a boolean to be used as a default value. - * @return element text as a boolean value. - */ - public static boolean getBooleanValue(Element element, boolean defaultValue) { - boolean returnValue = defaultValue; - String booleanValue = null; - - // Get value as a string - if ((booleanValue = XMLUtils.getText(element)) != null) - { - returnValue = Boolean.valueOf(booleanValue).booleanValue(); - } - - // Return boolean - return returnValue; - } - - /** - * Get attribute value as a boolean. - * - * @param element an Element object. - * @param attrName a name of an attribute. - * @param defaultValue a boolean to be used as a default value. - * @return attribute value as a boolean. - */ - public static boolean getBooleanValue(Element element, String attrName, - boolean defaultValue) { - boolean returnValue = defaultValue; - String booleanValue = null; - - // Get value as a string - if ((booleanValue = XMLUtils.getAttributeValue(element, attrName)) != null) - { - returnValue = Boolean.valueOf(booleanValue).booleanValue(); - } - - // Return boolean - return returnValue; - } - - /** - * Create QName. - * - * @param qnameString a qualified name. - * @return a QName object. - */ - public static QName createQName(String qnameString) { - QName qname = null; - - // Locate local part - int index = qnameString.lastIndexOf(":"); - - // Create new QName - if (index != -1) - { - qname = new QName(qnameString.substring(0, index), qnameString - .substring(index + 1)); - } - - else - { - qname = new QName(qnameString); - } - - return qname; - } - - /** - * Error Handler - */ - private static class ErrHandler implements ErrorHandler - { - /** - * Warning - */ - public void warning(SAXParseException spe) throws SAXException { - String message = "Warning: " + spe.getMessage(); - throw new SAXException(message); - } - - /** - * Error - */ - public void error(SAXParseException spe) throws SAXException { - String message = "Error: " + spe.getMessage(); - throw new SAXException(message); - } - - /** - * Fatal Error - */ - public void fatalError(SAXParseException spe) throws SAXException { - String message = "Fatal Error: " + spe.getMessage(); - throw new SAXException(message); - } - } - - /** - * Determine if the string is a NMTOKEN data type. - * - * @param text a string value. - * @return true if the string is a NMTOKEN data type. - */ - public static boolean isNmtoken(String text) { - boolean nmtoken = true; - - // ADD: Need to find a utility function that does this or write it from - // scratch - - return nmtoken; - } - - /** - * The method searches the first direct descendant element with the given - * qname. - * - * @param parent parent DOM element. - * @param elementName QName of the element to be searched. - * @return DOM element if the required element found, and null otherwise. - */ - static public Element findChildElement(Element parent, QName elementName) { - if (parent == null) - throw new IllegalArgumentException("Parent element can not be NULL"); - if (elementName == null) - throw new IllegalArgumentException("Element name can not be NULL"); - if (elementName.getLocalPart() == null) - throw new IllegalArgumentException( - "Local part of the element name can not be NULL"); - - Node n = parent.getFirstChild(); - String local = elementName.getLocalPart(); - String ns = elementName.getNamespaceURI(); - while (n != null) - { - if (Node.ELEMENT_NODE == n.getNodeType() - && local.equals(n.getLocalName()) - && NullUtil.equals(ns, n.getNamespaceURI())) - return (Element) n; - n = n.getNextSibling(); - } - - return null; - } - - /** - * The method searches the first sibling element with the given qname. - * - * @param active DOM element. - * @param elementName QName of the element to be searched. - * @return DOM element if the required element found, and null otherwise. - */ - static public Element findElement(Element active, QName elementName) { - if (active == null) - throw new IllegalArgumentException("Active element can not be NULL"); - if (elementName == null) - throw new IllegalArgumentException("Element name can not be NULL"); - if (elementName.getLocalPart() == null) - throw new IllegalArgumentException( - "Local part of the element name can not be NULL"); - - Node n = active.getNextSibling(); - String local = elementName.getLocalPart(); - String ns = elementName.getNamespaceURI(); - while (n != null) - { - if (Node.ELEMENT_NODE == n.getNodeType() - && local.equals(n.getLocalName()) - && NullUtil.equals(ns, n.getNamespaceURI())) - return (Element) n; - n = n.getNextSibling(); - } - - return null; - } - - /** - * The method returns attribute node by the given qname. - * - * @param el owner element. - * @param attributeName QName of the attribute node to be searched. - * @return attribute node by the given qname. - */ - static public Attr getAttribute(Element el, QName attributeName) { - if (el == null) - throw new IllegalArgumentException("Element can not be NULL"); - if (attributeName == null) - throw new IllegalArgumentException("Attribute name can not be NULL"); - if (attributeName.getLocalPart() == null) - throw new IllegalArgumentException( - "Local part of the attribute name can not be NULL"); - - attributeName.getNamespaceURI(); - attributeName.getLocalPart(); - Attr a = el.getAttributeNodeNS(attributeName.getNamespaceURI(), - attributeName.getLocalPart()); - if (a == null) - // try to get with null namespace - a = el.getAttributeNodeNS(null, attributeName.getLocalPart()); - return a; - } - - /** - * The method compares node's name to the given qname. - * - * @param n a node. - * @param name a QName object. - * @return true if the node's name is the same as the given qname. - */ - static public boolean equals(Node n, QName name) { - if (n == null || name == null) - return false; - return (NullUtil.equals(name.getLocalPart(), n.getLocalName()) && NullUtil - .equals(name.getNamespaceURI(), n.getNamespaceURI())); - } - - /** - * The method searches namespace URI for the given prefix. The searching - * mechanism is implemented according to the "XML Namespaces resolution" - * algorithm ('http://www.w3.org/TR/2003/WD-DOM-Level-3- - * Core-20030226/namespaces-algorithms.html'). - * - * @param n a node. - * @param prefix a prefix. - * @return the namespace URI for the given prefix. - */ - static public String findNamespaceURI(Node n, String prefix) { - if (prefix == null) - return null; - - while (n != null) - { - if (prefix.equals(n.getPrefix())) - return n.getNamespaceURI(); - - if (Node.ELEMENT_NODE == n.getNodeType()) - { - NamedNodeMap m = n.getAttributes(); - if (m != null) - for (int i = 0; i < m.getLength(); i++) - { - Node a = m.item(i); - if (WSITag.NS_URI_XMLNS.equals(a.getNamespaceURI()) - && prefix.equals(a.getLocalName())) - return a.getNodeValue(); - } - } - - n = n.getParentNode(); - } - - return null; - } - - /** - * Serializes element. - * - * @param n a DOM element. - * @return the serialized element. - */ - public static String serialize(Element n) { - String value = null; - try - { - StringWriter writer = new StringWriter(); - XMLSerializer s = new XMLSerializer(writer, new OutputFormat("xml", - "UTF-8", true)); - s.serialize(n); - value = writer.toString(); - writer.close(); - } catch (Throwable t) - { - // nothing - value = "EXCEPTION : " + t.getMessage(); - } - - return value; - } - - /** - * The method return list of child elements. - * - * @param parent an org.w3c.dom.Element object. - * @return list of child elements. - */ - static public Vector getChildElements(Element parent) { - if (parent == null) - throw new IllegalArgumentException("Element can not be NULL"); - - Vector vect = new Vector(); - Element elem = getFirstChild(parent); - while (elem != null) - { - vect.add(elem); - elem = getNextSibling(elem); - } - return vect; - } - - /** - * Serializes document. - * - * @param doc an org.w3c.dom.Document object. - * @param writer a java.io.Writer object. - * @throws Exception if unable to serialize the document. - */ - public static void serializeDoc(Document doc, Writer writer) - throws java.lang.Exception { - XMLSerializer s = new XMLSerializer(writer, new OutputFormat("xml", - "UTF-8", true)); - s.serialize(doc); - } - - /** - * Serealizes element. - * - * @param elem an org.w3c.dom.Element object. - * @param writer a java.io.Writer object. - * @throws Exception if unable to serialize the DOM element. - */ - public static void serializeElement(Element elem, Writer writer) - throws java.lang.Exception { - XMLSerializer s = new XMLSerializer(writer, new OutputFormat("xml", - "UTF-8", true)); - s.serialize(elem); - } - - /** - * Remove all elements from list without namespace. - * - * @param vect a list of elements. - */ - public static void removeAllElementsWithoutNS(Vector vect) { - for (int i = 0; i < vect.size();) - { - if (((Element) vect.get(i)).getNamespaceURI() == null - || ((Element) vect.get(i)).getNamespaceURI().equals("")) - vect.remove(i); - else - i++; - } - } - - /** - * Create URL using base URI. - * - * @param url a URL string. - * @param baseURI a base url string to assist in creating a URL. - * @return newly created URL. - * @throws MalformedURLException if a malformed URL has occurred. - */ - public static URL createURL(String url, String baseURI) - throws MalformedURLException { - URL returnURL = null; - URI uri = null; - try - { - returnURL = new URL(url); - uri = new URI(url); - uri = uri.normalize(); - returnURL = new URL(uri.toString()); - } - - catch (Exception mue) - { - int i = baseURI.lastIndexOf('/'); - int j = baseURI.lastIndexOf('\\'); - if (j > i) - i = j; - try - { - uri = new URI(baseURI.substring(0, i + 1) + url); - uri = uri.normalize(); - returnURL = uri.toURL(); - } - catch (Exception e) - { - return new URL(baseURI.substring(0, i + 1) + url); - } - } - return returnURL; - } - - /** - * Create URL using base URI. - * - * @param url a URL string. - * @param baseURI a base url string to assist in creating a URL. - * @return newly created URL string. - * @throws MalformedURLException if a malformed URL has occurred. - */ - public static String createURLString(String url, String baseURI) - throws MalformedURLException { - return createURL(url, baseURI).toExternalForm(); - } - - /** - * This method is used only for unit testing. - * - * @param args arguments for main. - */ - public static void main(String[] args) { - try - { - System.out.println("Filename: " + args[0] + ", schema: " + args[1]); - parseXMLDocument(args[0], args[1]); - System.out.println("Done."); - } - - catch (Exception e) - { - System.err.println(e.toString()); - } - - System.exit(0); - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLVisitor.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLVisitor.java deleted file mode 100644 index fc9ea3653..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/XMLVisitor.java +++ /dev/null @@ -1,186 +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.xml; - -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Entity; -import org.w3c.dom.EntityReference; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Notation; -import org.w3c.dom.ProcessingInstruction; -import org.w3c.dom.Text; - -/** - * We don't have access to the node source code, so this does - * our double-dispatch the hard way. - */ -public class XMLVisitor -{ - /** - * Visit XML CDATASection node. - * @param s an XML CDATASection node. - */ - public void visit(CDATASection s) - { - } - - /** - * Visit XML Document node. - * @param e an XML Document node. - */ - public void visit(Document e) - { - } - - /** - * Visit XML DocumentType node. - * @param e an ML DocumentType node. - */ - public void visit(DocumentType e) - { - } - - /** - * Visit XML Attribute node. - * @param e an XML Atrribute node. - */ - public void visit(Attr e) - { - } - - /** - * Visit XML Element node. - * @param e an XML Element node. - */ - public void visit(Element e) - { - } - - /** - * Visit XML Comment node. - * @param e an XML Comment node. - */ - public void visit(Comment e) - { - } - - /** - * Visit XML Text node. - * @param e an XML Text node. - */ - public void visit(Text e) - { - } - - /** - * Visit XML EntityReference node. - * @param e an XML EntityReference node. - */ - public void visit(EntityReference e) - { - } - - /** - * Visit XML Entity node. - * @param e an XML Entity node. - */ - public void visit(Entity e) - { - } - - /** - * Visit XML Notation node. - * @param n an XML Notation node. - */ - public void visit(Notation n) - { - } - - /** - * Visit XML ProcessingInstruction node. - * @param i an XML ProcessingInstruction node. - */ - public void visit(ProcessingInstruction i) - { - } - - /** - * Visit XML NamedNodeMap node. - * @param i an XML NamedNodeMap node. - */ - public void visit(NamedNodeMap i) - { - } - - /** - * Visit XML node. - * @param node an XML node. - */ - public void doVisit(Object node) - { - if (node instanceof Element) - { - visit((Element) node); - } - else if (node instanceof Comment) - { - visit((Comment) node); - } - else if (node instanceof CDATASection) - { - // CDATASection extends Text, so it must come first - visit((CDATASection) node); - } - else if (node instanceof Text) - { - visit((Text) node); - } - else if (node instanceof Attr) - { - visit((Attr) node); - } - else if (node instanceof Document) - { - visit((Document) node); - } - else if (node instanceof EntityReference) - { - visit((EntityReference) node); - } - else if (node instanceof Entity) - { - visit((Entity) node); - } - else if (node instanceof DocumentType) - { - visit((DocumentType) node); - } - else if (node instanceof Notation) - { - visit((Notation) node); - } - else if (node instanceof ProcessingInstruction) - { - visit((ProcessingInstruction) node); - } - else if (node instanceof NamedNodeMap) - { - visit((NamedNodeMap) node); - } - } -} - -// END OF FILE diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/DOMParser.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/DOMParser.java deleted file mode 100644 index 2ee0361d3..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/DOMParser.java +++ /dev/null @@ -1,93 +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.xml.dom; - -import org.apache.xerces.dom.ElementImpl; -import org.apache.xerces.xni.Augmentations; -import org.apache.xerces.xni.NamespaceContext; -import org.apache.xerces.xni.QName; -import org.apache.xerces.xni.XMLAttributes; -import org.apache.xerces.xni.XMLLocator; -import org.apache.xerces.xni.XNIException; -import org.w3c.dom.Element; -import org.xml.sax.SAXNotRecognizedException; -import org.xml.sax.SAXNotSupportedException; - -/** - * This class specializes org.apache.xerces.parsers.DOMParser. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public class DOMParser extends org.apache.xerces.parsers.DOMParser -{ - /** - * Locator. - */ - XMLLocator locator = null; - - /* (non-Javadoc) - * @see org.apache.xerces.xni.XMLDocumentHandler#startDocument(org.apache.xerces.xni.XMLLocator, java.lang.String, org.apache.xerces.xni.NamespaceContext, org.apache.xerces.xni.Augmentations) - */ - public void startDocument( - XMLLocator locator, - String encoding, - NamespaceContext context, - Augmentations augs) - throws XNIException - { - this.locator = locator; - super.startDocument(locator, encoding, context, augs); - } - - /* (non-Javadoc) - * @see org.apache.xerces.xni.XMLDocumentHandler#startElement(org.apache.xerces.xni.QName, org.apache.xerces.xni.XMLAttributes, org.apache.xerces.xni.Augmentations) - */ - public void startElement( - QName qname, - XMLAttributes attributes, - Augmentations augs) - throws XNIException - { - Element element; - ElementImpl elementImpl; - - // DEBUG: - //System.err.println("1-line: " + locator.getLineNumber() + ", column: " + locator.getColumnNumber()); - - super.startElement(qname, attributes, augs); - - // DEBUG: - //System.err.println("2-line: " + locator.getLineNumber() + ", column: " + locator.getColumnNumber()); - - try - { - element = (Element) getProperty(CURRENT_ELEMENT_NODE); - - elementImpl = (ElementImpl) element; - // Setting the user data with an identifier such as ElementLocation.KEY_NAME - // may be a long term good idea. The setUserData method with no id is used - // to support JVMs with alternate versions of Xerces. - elementImpl.setUserData(new ElementLocation(locator.getLineNumber(), locator.getColumnNumber())); - } - catch (ClassCastException cce) - { - } - catch (SAXNotSupportedException snse) - { - // DEBUG: - //System.err.println(snse.toString()); - } - catch (SAXNotRecognizedException snre) - { - } - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/ElementLocation.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/ElementLocation.java deleted file mode 100644 index fa9053363..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/dom/ElementLocation.java +++ /dev/null @@ -1,91 +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.xml.dom; - -import org.eclipse.wst.wsi.internal.core.WSIConstants; -import org.xml.sax.Locator; - -/** - * This class provides line and column information for a node within an XML document. - * - * @version 1.0.1 - * @author Peter Brittenham (peterbr@us.ibm.com) - */ -public class ElementLocation -{ - /** - * Line number. - */ - public static final String KEY_NAME = ElementLocation.class.getName(); - - /** - * Line number. - */ - protected int lineNumber = 0; - - /** - * Column number. - */ - protected int columnNumber = 0; - - /** - * Element location. - * @param lineNumber a line number. - * @param columnNumber a column number. - */ - public ElementLocation(int lineNumber, int columnNumber) - { - this.lineNumber = lineNumber; - this.columnNumber = columnNumber; - } - - /** - * Element location. - * @param locator a Locator object. - */ - public ElementLocation(Locator locator) - { - this.lineNumber = locator.getLineNumber(); - this.columnNumber = locator.getColumnNumber(); - } - - /** - * Get the line number. - * @return an int representing the line number value. - */ - public int getLineNumber() - { - return this.lineNumber; - } - - /** - * Get the column number. - * @return an int representing the column number value. - */ - public int getColumnNumber() - { - return this.columnNumber; - } - - /** - * Get string representation of this object. - */ - public String toString() - { - return "Element Location:\n" - + " " - + WSIConstants.ATTR_LINE_NUMBER - + "=" - + this.lineNumber - + "\n"; - //+ " " + WSIConstants.ATTR_COLUMN_NUMBER + "=" + this.columnNumber + "\n"; - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderFactoryImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderFactoryImpl.java deleted file mode 100644 index 4bec5cdfe..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderFactoryImpl.java +++ /dev/null @@ -1,100 +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.xml.jaxp; - -import java.util.Hashtable; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -/** - * This class defines a factory API that enables us to obtain a parser that - * produces DOM object trees from XML documents. Note this class specializes - * javax.xml.parsers.DocumentBuilderFactory. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - */ -public class DocumentBuilderFactoryImpl extends DocumentBuilderFactory -{ - - protected Hashtable attributes = new Hashtable(); - - /** - * Creates a new instance of a DocumentBuilder using the currently - * configured parameters. - * - * @return a new instance of a DocumentBuilder. - * @throws ParserConfigurationException if a DocumentBuilder cannot - * be created which satisfies the configuration requested. - */ - public DocumentBuilder newDocumentBuilder() - throws ParserConfigurationException - { - DocumentBuilder documentBuilder = null; - - try - { - documentBuilder = new DocumentBuilderImpl(this, attributes); - } - - catch (Exception e) - { - throw new ParserConfigurationException(e.getMessage()); - } - - return documentBuilder; - } - - /** - * Allows the user to retrieve specific attributes on the underlying - * implementation. - * - * @param name the name of the attribute. - * @return the value of the attribute. - * @throws IllegalArgumentException if the underlying implementation - * doesn't recognize the attribute. - */ - public Object getAttribute(String name) throws IllegalArgumentException - { - return attributes.get(name); - } - - /** - * Allows the user to set specific attributes on the underlying - * implementation. - * - * @param name the name of the attribute. - * @param value the value of the attribute. - * @throws IllegalArgumentException if the underlying implementation - * doesn't recognize the attribute. - */ - public void setAttribute(String name, Object value) - throws IllegalArgumentException - { - attributes.put(name, value); - } - - public void setFeature(String arg0, boolean arg1) - throws ParserConfigurationException - { - // currently we do not support setting any feature - // as per spec, we should throw an exception - throw new ParserConfigurationException(arg0 + " Not supported"); - } - - public boolean getFeature(String arg0) - throws ParserConfigurationException - { - // as per spec, we should throw an exception - throw new ParserConfigurationException(arg0 + " is not supported"); - } -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderImpl.java deleted file mode 100644 index 2858dd7cd..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/jaxp/DocumentBuilderImpl.java +++ /dev/null @@ -1,248 +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.xml.jaxp; - - -import java.io.IOException; -import java.util.Enumeration; -import java.util.Hashtable; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.apache.xerces.dom.DOMImplementationImpl; -import org.apache.xerces.dom.DocumentImpl; -import org.apache.xerces.impl.Constants; -import org.eclipse.wst.wsi.internal.core.xml.XMLUtils; -import org.eclipse.wst.wsi.internal.core.xml.dom.DOMParser; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.xml.sax.EntityResolver; -import org.xml.sax.ErrorHandler; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import org.xml.sax.helpers.DefaultHandler; - -/** - * Using this class, we can obtain a Document from XML. This class is a - * specialization of javax.xml.parsers.DocumentBuilder. - * - * An instance of this class can be obtained from the - * DocumentBuilderFactory.newDocumentBuilder method. Once an instance - * of this class is obtained, XML can be parsed from a variety of input - * sources. These input sources are InputStreams, Files, URLs, and SAX - * InputSources. - -This class will javax.xml.parsers.DocumentBuilderFactory... - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public class DocumentBuilderImpl extends DocumentBuilder -{ - protected DOMParser domParser = null; - - protected EntityResolver entityResolver = null; - protected ErrorHandler errorHandler = new DefaultHandler(); - - protected static final String NAMESPACES_FEATURE = - Constants.SAX_FEATURE_PREFIX + Constants.NAMESPACES_FEATURE; - protected static final String VALIDATION_FEATURE = - Constants.SAX_FEATURE_PREFIX + Constants.VALIDATION_FEATURE; - - /** - * Constructor for DocumentBuilderImpl2. - * - * @param dbFactory a DocumentBuilderFactory object. - * @throws SAXException if any parse errors occur. - */ - public DocumentBuilderImpl(DocumentBuilderFactory dbFactory, Hashtable attributes) - throws SAXException - { - // Create parser - domParser = new DOMParser(); - - // Set namespace aware - domParser.setFeature(NAMESPACES_FEATURE, dbFactory.isNamespaceAware()); - - // Set validating - domParser.setFeature(VALIDATION_FEATURE, dbFactory.isValidating()); - if (dbFactory.isValidating()) domParser.setFeature(XMLUtils.FEATURE_VALIDATION_SCHEMA, true); - - // Do not defer node expansion - domParser.setFeature( - Constants.XERCES_FEATURE_PREFIX + Constants.DEFER_NODE_EXPANSION_FEATURE, - false); - - // Set other features from the document factory builder - domParser.setFeature( - Constants.XERCES_FEATURE_PREFIX + Constants.INCLUDE_IGNORABLE_WHITESPACE, - !dbFactory.isIgnoringElementContentWhitespace()); - domParser.setFeature( - Constants.XERCES_FEATURE_PREFIX - + Constants.CREATE_ENTITY_REF_NODES_FEATURE, - !dbFactory.isExpandEntityReferences()); - domParser.setFeature( - Constants.XERCES_FEATURE_PREFIX + Constants.INCLUDE_COMMENTS_FEATURE, - !dbFactory.isIgnoringComments()); - domParser.setFeature( - Constants.XERCES_FEATURE_PREFIX + Constants.CREATE_CDATA_NODES_FEATURE, - !dbFactory.isCoalescing()); - - // set features and properties specified at factory level - if (attributes != null) - { - for (Enumeration i=attributes.keys(); i.hasMoreElements();) - { - String attribute = (String)i.nextElement(); - if (attribute.equals(XMLUtils.JAXP_SCHEMA_SOURCE)) - { - // for multiple schema validation may be array of InputSource - if(attributes.get(attribute) instanceof InputSource[]) - domParser.setProperty(attribute, (InputSource[])attributes.get(attribute)); - else - domParser.setProperty(attribute, (InputSource)attributes.get(attribute)); - } - else - { - domParser.setProperty(attribute, attributes.get(attribute)); - } - } - } - } - - /** - * Parse the content of the given input source as an XML document and return a new DOM. - * @param is InputStream containing the content to be parsed. - * @throws SAXException if any parse errors occur. - * @throws IOException if any IO errors occur. - */ - public Document parse(InputSource is) throws SAXException, IOException - { - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // Set entity resolver - if (this.entityResolver != null) - domParser.setEntityResolver(this.entityResolver); - - // Set error handler - if (this.errorHandler != null) - domParser.setErrorHandler(this.errorHandler); - - // Parse input source - domParser.parse(is); - - // Return the document that was created - return domParser.getDocument(); - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - } - - /** - * Indicates whether or not this parser is configured to understand namespaces. - * @return true if this parser is configured to understand namespaces; false otherwise. - */ - public boolean isNamespaceAware() - { - boolean namespaceAware = false; - - try - { - namespaceAware = domParser.getFeature(NAMESPACES_FEATURE); - } - - catch (SAXException se) - { - throw new RuntimeException(se.toString()); - } - - return namespaceAware; - } - - /** - * Indicates whether or not this parser is configured to validate XML documents. - * @return true if this parser is configured to validate XML documents; false otherwise. - */ - public boolean isValidating() - { - boolean validating = false; - - try - { - validating = domParser.getFeature(VALIDATION_FEATURE); - } - - catch (SAXException se) - { - throw new RuntimeException(se.toString()); - } - - return validating; - } - - /** - * Specify the EntityResolver to be used to resolve entities present - * in the XML document to be parsed. Setting this to null will result - * in the underlying implementation using it's own default - * implementation and behavior. - * - * @param er the EntityResolver to be used to resolve entities - * present in the XML document to be parsed. - */ - public void setEntityResolver(EntityResolver entityResolver) - { - this.entityResolver = entityResolver; - } - - /** - * Specify the ErrorHandler to be used to report errors present in - * the XML document to be parsed. Setting this to null will result - * in the underlying implementation using it's own default - * implementation and behavior. - * - * param eh the ErrorHandler to be used to report errors present in - * the XML document to be parsed. - */ - public void setErrorHandler(ErrorHandler errorHandler) - { - this.errorHandler = errorHandler; - } - - /** - * Obtain a new instance of a DOM Document object to build a DOM - * tree with. An alternative way to create a DOM Document object - * is to use the getDOMImplementation method to get a DOM Level 2 - * DOMImplementation object and then use DOM Level 2 methods on - * that object to create a DOM Document object. - * - * @return a new instance of a DOM Document object. - */ - public Document newDocument() - { - return new DocumentImpl(); - } - - /** - * Obtain an instance of a DOMImplementation object. - * @return a new instance of a DOMImplementation. - */ - public DOMImplementation getDOMImplementation() - { - return new DOMImplementationImpl(); - } - -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/TargetNamespaceProcessor.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/TargetNamespaceProcessor.java deleted file mode 100644 index 6dc2435df..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/TargetNamespaceProcessor.java +++ /dev/null @@ -1,142 +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.xml.schema; - -import java.util.List; - -import org.eclipse.wst.wsi.internal.core.WSIException; -import org.eclipse.wst.wsi.internal.core.util.TestUtils; -import org.eclipse.wst.wsi.internal.core.xml.XMLUtils; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * This class processes target namespaces. Note this class is a specialization - * of org.wsi.xml.schema.XMLSchemaProcessor. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public class TargetNamespaceProcessor extends XMLSchemaProcessor -{ - - /** - * Constructor for TargetNamespaceProcess. - * - * @param context - * document context - * @param documentList - * cache of previously parsed documents - */ - public TargetNamespaceProcessor(String context) - { - super(context, false); - } - - protected void processSchema(Element element) - { - String tns = null; - Attr attr = XMLUtils.getAttribute(element, ATTR_XSD_TARGETNAMESPACE); - - // If the attribute was found and value is not null, then add it to the list - if ((attr != null) && ((tns = attr.getValue()) != null)) - { - // Add the targetNamespace to the return list - returnList.add(tns); - } - } - - /** - * Search for all schema elements, load the xsd documents, and then process - * them. - * - * @param node - * node. - * @return a list. - * @throws WSIException - * if the XML schema file is not found or if it is not formatted - * correctly. - */ - public List processAllSchema(Node node) throws WSIException - { - return processAllSchema(node, context); - } - - /** - * Search for all schema elements, load the xsd documents, and then process - * them. - * - * @param node - * node. - * @return a list. - * @throws WSIException - * if the XML schema file is not found or if it is not formatted - * correctly. - */ - private List processAllSchema(Node node, String ctx) throws WSIException - { - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLUtils.class.getClassLoader()); - - // if xsd:schema element is found -> process schema - if (XMLUtils.equals(node, ELEM_XSD_SCHEMA)) - { - processSchema((Element) node); - - Node n = node.getFirstChild(); - while (n != null) - { - if (Node.ELEMENT_NODE == n.getNodeType()&& XMLUtils.equals(n, ELEM_XSD_IMPORT)) - { - Attr schemaLocation = XMLUtils.getAttribute((Element) n, ATTR_XSD_SCHEMALOCATION); - - // Try to parse imported XSD - if (schemaLocation != null && schemaLocation.getValue() != null) - { - if (!schemaLocations.contains(schemaLocation.getValue())) - { - schemaLocations.add(schemaLocation.getValue()); - try - { - // Read and pParse the XML schema document - Document document = parseXMLDocumentURL(schemaLocation.getValue(), ctx, TestUtils.getXMLSchemaLocation()); - processAllSchema(document.getDocumentElement(), XMLUtils.createURLString(schemaLocation.getValue(), ctx)); - } - catch (WSIException e) - { - if (throwException) throw e; - } - catch (Throwable t) - { - // NOTE: An exception will occur if the XML schema file is not - // found or if it is not formatted correctly - if (throwException) throw new WSIException(t.getMessage(), t); - } - } - } - } - n = n.getNextSibling(); - } - } - - // Return list created by the class that extends this class - return returnList; - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } -} -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaProcessor.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaProcessor.java deleted file mode 100644 index e6e52e15a..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaProcessor.java +++ /dev/null @@ -1,170 +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.xml.schema; - -import java.util.List; -import java.util.Vector; - -import org.eclipse.wst.wsi.internal.core.WSIException; -import org.eclipse.wst.wsi.internal.core.util.TestUtils; -import org.eclipse.wst.wsi.internal.core.xml.XMLDocumentCacheUser; -import org.eclipse.wst.wsi.internal.core.xml.XMLTags; -import org.eclipse.wst.wsi.internal.core.xml.XMLUtils; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * This abstract class is used to process an XML Schema. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public abstract class XMLSchemaProcessor - extends XMLDocumentCacheUser - implements XMLTags -{ - protected List returnList = new Vector(); - protected String context; - protected boolean throwException = true; - protected List schemaLocations = new Vector(); - - /** - * Constructor for XMLSchemaProcessor. - * @param context document context. - * @param documentList cache of previously parsed documents. - */ - public XMLSchemaProcessor(String context) - { - this(context, true); - } - - /** - * Constructor for XMLSchemaProcessor. - * @param context document context. - * @param documentList cache of previously parsed documents. - * @param throwException indicates if an exception should be thrown if there is a parsing problem. - */ - public XMLSchemaProcessor( - String context, - boolean throwException) - { - super(); - - this.context = context; - this.throwException = throwException; - } - - /** - * Search for all schema elements, load the xsd documents, and then process them. - * @param node node. - * @return a list. - * @throws WSIException if the XML schema file is not found or if it is not formatted correctly. - */ - public List processAllSchema(Node node) throws WSIException - { - return processAllSchema(node, context); - } - - /** - * Search for all schema elements, load the xsd documents, and then process them. - * @param node node. - * @return a list. - * @throws WSIException if the XML schema file is not found or if it is not formatted correctly. - */ - private List processAllSchema(Node node, String ctx) throws WSIException - { - ClassLoader currentLoader = Thread.currentThread().getContextClassLoader(); - try - { - Thread.currentThread().setContextClassLoader(XMLSchemaProcessor.class.getClassLoader()); - // Process all nodes - while (node != null) - { - // If this is an element node, then continue - if (Node.ELEMENT_NODE == node.getNodeType()) - { - // if xsd:schema element is found -> process schema - if (XMLUtils.equals(node, ELEM_XSD_SCHEMA)) - { - processSchema((Element) node); - - // Process all children of the schema element - processAllSchema(node.getFirstChild(), ctx); - } - - // if xsd:import element is found -> load schema and process schema - else if (XMLUtils.equals(node, ELEM_XSD_IMPORT)) - { - - Attr schemaLocation = - XMLUtils.getAttribute((Element) node, ATTR_XSD_SCHEMALOCATION); - - // Try to parse imported XSD - if (schemaLocation != null && schemaLocation.getValue() != null) - { - if (!schemaLocations.contains(schemaLocation.getValue())) - { - schemaLocations.add(schemaLocation.getValue()); - try - { - // Read and pParse the XML schema document - Document document = - parseXMLDocumentURL( - schemaLocation.getValue(), - ctx, - TestUtils.getXMLSchemaLocation()); - - processAllSchema(document.getDocumentElement(), - XMLUtils.createURLString(schemaLocation.getValue(), ctx)); - } - catch (WSIException e) - { - if (throwException) - throw e; - } - - catch (Throwable t) - { - // NOTE: An exception will occur if the XML schema file is not found or if it is not formatted correctly - if (throwException) - throw new WSIException(t.getMessage(), t); - } - } - } - } - - else - { - // else iterate element recursively - processAllSchema(node.getFirstChild(), ctx); - } - } - - // Get next sibiling - node = node.getNextSibling(); - } - - } - finally - { - Thread.currentThread().setContextClassLoader(currentLoader); - } - - - // Return list created by the class that extends this class - return returnList; - } - - protected abstract void processSchema(Element element); - -} diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaValidator.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaValidator.java deleted file mode 100644 index 36ca130aa..000000000 --- a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/xml/schema/XMLSchemaValidator.java +++ /dev/null @@ -1,152 +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.xml.schema; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.eclipse.wst.wsi.internal.core.WSIException; -import org.eclipse.wst.wsi.internal.core.util.TestUtils; -import org.eclipse.wst.wsi.internal.core.xml.XMLUtils; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -import com.ibm.wsdl.util.xml.DOM2Writer; - -/** - * This class is used to validate an XML Schema. - * - * @author Peter Brittenham (peterbr@us.ibm.com) - * @version 1.0.1 - */ -public class XMLSchemaValidator extends XMLSchemaProcessor -{ - private static final String XMLNS_PREFIX = "xmlns:"; - - /** - * Constructor for XMLSchemaValidator. - * @param context document context. - * @param documentList cache of previously parsed documents. - */ - public XMLSchemaValidator(String context) - { - super(context); - } - - protected void processSchema(Element element) - { - NamedNodeMap attrList; - - HashMap elementMap = new HashMap(); - HashMap nsMap = new HashMap(); - - try - { - // Get schema content as a string - String schema = DOM2Writer.nodeToString(element); - - // Get list of element namespaces - if ((attrList = element.getAttributes()) != null) - { - addNamespaces(attrList, elementMap, null); - } - - // If elementMap does not contain entry for it's own namespace, then add it - if (elementMap.get(XMLNS_PREFIX + element.getPrefix()) == null) - { - elementMap.put( - XMLNS_PREFIX + element.getPrefix(), - element.getNamespaceURI()); - } - - // Get first parent node and then process all of them until you hit the top of the document - Node parentNode = element.getParentNode(); - while (parentNode != null) - { - // Only process Element nodes - if (parentNode.getNodeType() == Node.ELEMENT_NODE) - { - // Get the list of attributes for the parent node - attrList = parentNode.getAttributes(); - - // If there are attributes, look for the xmlns: attributes - if (attrList != null) - { - addNamespaces(attrList, nsMap, elementMap); - } - } - - parentNode = parentNode.getParentNode(); - } - - // Build namespace list - if (nsMap.size() > 0) - { - String attr; - String namespaceList = ""; - Iterator iterator = nsMap.keySet().iterator(); - while (iterator.hasNext()) - { - attr = (String) iterator.next(); - namespaceList += " " + attr + "=\"" + nsMap.get(attr) + "\""; - } - - // Add namespace settings, since the DOM2Writer will miss any that are used as attribute values - int index = schema.indexOf(">"); - if (index > 0) - { - String start = schema.substring(0, index); - String end = schema.substring(index); - - schema = start + namespaceList + end; - } - } - - // Schema validate the XML schema document - XMLUtils.parseXML(schema, TestUtils.getXMLSchemaLocation()); - } - - catch (WSIException we) - { - Throwable t = we.getTargetException(); - if (t != null) - { - returnList.add(t.getMessage()); - } - } - } - - private void addNamespaces(NamedNodeMap attrList, Map nsMap, Map elementMap) - { - Node attr; - String nodeName; - - for (int i = 0; i < attrList.getLength(); i++) - { - attr = attrList.item(i); - - // Get the attribute node name - nodeName = attr.getNodeName(); - - // If it starts with xmlns:, then determine if it should be added to the list of namespaces - if (nodeName.startsWith(XMLNS_PREFIX) - && ((elementMap == null - || (elementMap != null && elementMap.get(nodeName) == null)))) - { - if (nsMap.get(nodeName) == null) - nsMap.put(nodeName, attr.getNodeValue()); - } - } - } - -} |