diff 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 diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebServiceToolWorkflow/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/extensions/schema/SchemaDeserializer.java	Tue Jun 07 18:00:50 2011 -0400
@@ -0,0 +1,196 @@
+/*
+ * (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>&lt;schema&gt;</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;
+}
+
+
+}
\ No newline at end of file