Mercurial > repos > ganjoo > webservice_toolsuite
view WebServiceToolWorkflow/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/extensions/schema/SchemaDeserializer.java @ 0:d5cd409b8a18 default tip
Migrated tool version 1.0.0 from old tool shed archive to new tool shed repository
author | ganjoo |
---|---|
date | Tue, 07 Jun 2011 18:00:50 -0400 |
parents | |
children |
line wrap: on
line source
/* * (c) Copyright IBM Corp 2004, 2005 */ package edu.uga.cs.lsdis.meteors.wadls.extensions.schema; import java.io.Serializable; import java.util.Hashtable; import java.util.Map; import javax.wadls.Application; import javax.wadls.WADLSException; import javax.wadls.extensions.ExtensionDeserializer; import javax.wadls.extensions.schema.Schema; import javax.wadls.extensions.schema.SchemaImport; import javax.wadls.extensions.schema.SchemaReference; import javax.wadls.xml.WADLLocator; import javax.wadls.WADLSException; import javax.wadls.extensions.ExtensibilityElement; import javax.wadls.extensions.ExtensionRegistry; import javax.xml.namespace.QName; import org.w3c.dom.Element; import edu.uga.cs.lsdis.meteors.wadls.extensions.schema.SchemaConstants; import edu.uga.cs.lsdis.meteors.wadls.Constants; import edu.uga.cs.lsdis.meteors.wadls.util.xml.DOMUtils; import edu.uga.cs.lsdis.meteors.wadls.util.xml.QNameUtils; /** * This class is used to deserialize <code><schema></code> elements into * Schema instances. * * @see SchemaImpl * @see SchemaSerializer * * @author Jeremy Hughes <hughesj@uk.ibm.com> */ public class SchemaDeserializer implements Serializable { // Need to set this since a Definition is serializable and it contains an // extension registry which contains one of these public static final long serialVersionUID = 1; private final Map allReferencedSchemas = new Hashtable(); private static ThreadLocal wsdlLocator = new ThreadLocal(); /** * Set the WSDLLocator to be used by the deserializer on this thread. * * @param loc The WSDLLocator to be used. * * @see WSDLLocator */ public static void setLocator(WADLLocator loc) { wsdlLocator.set(loc); } public Schema unmarshall(QName elementType, Element el, Application def) throws WADLSException { Schema schema = new SchemaImpl(); schema.setElementType(elementType); schema.setElement(el); schema.setDocumentBaseURI(def.getDocumentBaseURI()); //TODO: check if the 'required' attribute needs to be set // Go through the schema Element looking for child schemas if(elementType.getLocalPart().equalsIgnoreCase("include")){ Element tempEl = el; QName tempElType = QNameUtils.newQName(tempEl); // Create the appropriate SchemaReference subclass to represent // an <import>, an <include> or a <redefine> SchemaReference sr = null; String locationURI = null; if (SchemaConstants.XSD_INCLUDE_QNAME_LIST.contains(tempElType)) { // Create a new include. Don't use the // ExtensionRegistry.createExtension() // method as a Schema include is not a WSDL import. sr = schema.createInclude(); sr.setId(DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID)); locationURI = DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_HREF); sr.setSchemaLocationURI(locationURI); // Now the include is set up except for the pointer to the // referenced LWS, add the include to the LightWeightSchema. schema.addInclude(sr); } } else{ Element tempEl = DOMUtils.getFirstChildElement(el); for (; tempEl != null; tempEl = DOMUtils.getNextSiblingElement(tempEl)) { QName tempElType = QNameUtils.newQName(tempEl); // Create the appropriate SchemaReference subclass to represent // an <import>, an <include> or a <redefine> SchemaReference sr = null; String locationURI = null; if (SchemaConstants.XSD_IMPORT_QNAME_LIST.contains(tempElType)) { // Create a new import. Don't use the // ExtensionRegistry.createExtension() // method as a Schema import is not a WSDL import. SchemaImport im = schema.createImport(); im.setId(DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID)); im.setNamespaceURI(DOMUtils.getAttribute(tempEl, Constants.ATTR_NAMESPACE)); locationURI = DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION); im.setSchemaLocationURI(locationURI); // Now the import is set up except for the point to the // referenced LWS, add the import to the LightWeightSchema. schema.addImport(im); } else if (SchemaConstants.XSD_INCLUDE_QNAME_LIST.contains(tempElType)) { // Create a new include. Don't use the // ExtensionRegistry.createExtension() // method as a Schema include is not a WSDL import. sr = schema.createInclude(); sr.setId(DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID)); locationURI = DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION); sr.setSchemaLocationURI(locationURI); // Now the include is set up except for the pointer to the // referenced LWS, add the include to the LightWeightSchema. schema.addInclude(sr); } else if (SchemaConstants.XSD_REDEFINE_QNAME_LIST.contains(tempElType)) { // Create a new redefine. Don't use the // ExtensionRegistry.createExtension() method as a Schema redefine // is not a WSDL import. sr = schema.createRedefine(); sr.setId(DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID)); locationURI = DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION); sr.setSchemaLocationURI(locationURI); // Now the redefine is set up except for the pointer to the // referenced LWS, add the redefine to the LightWeightSchema. schema.addRedefine(sr); } else { // The element isn't one we're interested in so look at the next // one continue; } } //end for } return schema; } }