owenb 2002/11/14 08:23:18
Modified: java/src/org/apache/wsif/schema ElementType.java
ComplexContent.java Extension.java ComplexType.java
SequenceElement.java Restriction.java
SchemaType.java Schema.java SimpleType.java
Attribute.java
Log:
Improvements to schema objects:
- Make all schema objects Serializable
- Allow for sequences in complexTypes
- Make SequenceElement extend ElementType
Revision Changes Path
1.3 +4 -1 xml-axis-wsif/java/src/org/apache/wsif/schema/ElementType.java
Index: ElementType.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/ElementType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ElementType.java 8 Nov 2002 16:51:24 -0000 1.2
+++ ElementType.java 14 Nov 2002 16:23:13 -0000 1.3
@@ -57,6 +57,7 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
@@ -70,7 +71,9 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class ElementType extends SchemaType {
+public class ElementType extends SchemaType implements Serializable {
+
+ static final long serialVersionUID = 1L;
private String name = "";
private QName typeName = null;
1.2 +8 -3
xml-axis-wsif/java/src/org/apache/wsif/schema/ComplexContent.java
Index: ComplexContent.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/ComplexContent.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ComplexContent.java 15 Oct 2002 15:33:12 -0000 1.1
+++ ComplexContent.java 14 Nov 2002 16:23:16 -0000 1.2
@@ -57,6 +57,8 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
+
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -66,7 +68,10 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class ComplexContent {
+public class ComplexContent implements Serializable {
+
+ static final long serialVersionUID = 1L;
+
private Restriction restriction = null;
private Extension extention = null;
@@ -74,7 +79,7 @@
* Constructor
* @param el The dom element for this complexContent
*/
- ComplexContent(Element el) {
+ ComplexContent(Element el, String tns) {
NodeList children = el.getChildNodes();
for (int i=0; i<children.getLength(); i++) {
Node child = children.item(i);
@@ -82,7 +87,7 @@
Element subEl = (Element) child;
String elType = subEl.getLocalName();
if (elType.equals("restriction")) {
- restriction = new Restriction(subEl);
+ restriction = new Restriction(subEl, tns);
break;
} else if (elType.equals("extension")) {
extention = new Extension(subEl);
1.2 +5 -1 xml-axis-wsif/java/src/org/apache/wsif/schema/Extension.java
Index: Extension.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/Extension.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Extension.java 15 Oct 2002 15:33:12 -0000 1.1
+++ Extension.java 14 Nov 2002 16:23:16 -0000 1.2
@@ -57,6 +57,8 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
+
import org.w3c.dom.Element;
/**
@@ -64,7 +66,9 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class Extension {
+public class Extension implements Serializable {
+
+ static final long serialVersionUID = 1L;
/**
* Constructor
1.3 +38 -10 xml-axis-wsif/java/src/org/apache/wsif/schema/ComplexType.java
Index: ComplexType.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/ComplexType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ComplexType.java 8 Nov 2002 16:51:24 -0000 1.2
+++ ComplexType.java 14 Nov 2002 16:23:16 -0000 1.3
@@ -57,6 +57,8 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Vector;
import javax.xml.namespace.QName;
@@ -71,7 +73,9 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class ComplexType extends SchemaType {
+public class ComplexType extends SchemaType implements Serializable {
+
+ static final long serialVersionUID = 1L;
private boolean isAnArray = false;
private String name = "";
@@ -85,6 +89,7 @@
new QName(WSIFConstants.NS_URI_SOAP_ENC, "arrayType");
private static final QName wsdlArrayType =
new QName(WSIFConstants.NS_URI_WSDL, "arrayType");
+ ArrayList sequenceElements = new ArrayList();
/**
* Constructor
@@ -92,13 +97,12 @@
*/
ComplexType(Element el, String tns) {
typeName = getAttributeQName(el, "name", tns);
+ if (typeName != null) {
+ name = typeName.getLocalPart();
+ }
+
+ process(el, tns);
- // If the complexType has no name, we cannot map it. Don't do any more
processing
- // of this type
- if (typeName == null) return;
-
- name = typeName.getLocalPart();
- process(el);
if (name.startsWith("ArrayOf")) {
if (complexContent != null) {
Restriction res = complexContent.getRestriction();
@@ -186,7 +190,16 @@
return typeName;
}
- private void process(Element el) {
+ /**
+ * Get all the <element> elements within a sequence nested in this
complexType
+ * @return The <element> elements within the sequnce
+ */
+ public SequenceElement[] getSequenceElements() {
+ return (SequenceElement[]) sequenceElements.toArray(
+ new SequenceElement[sequenceElements.size()]);
+ }
+
+ private void process(Element el, String tns) {
NodeList children = el.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
@@ -194,10 +207,25 @@
Element subEl = (Element) child;
String elType = subEl.getLocalName();
if (elType.equals("complexContent")) {
- complexContent = new ComplexContent(subEl);
- break;
+ complexContent = new ComplexContent(subEl, tns);
+ } else if (elType.equals("sequence")) {
+ parseSequenceElements(subEl, tns);
}
}
}
}
+
+ private void parseSequenceElements(Element el, String tns) {
+ NodeList children = el.getChildNodes();
+ for (int i = 0; i < children.getLength(); i++) {
+ Node child = children.item(i);
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ Element subEl = (Element) child;
+ String elType = subEl.getLocalName();
+ if (elType.equals("element")) {
+ sequenceElements.add(new SequenceElement(subEl, tns));
+ }
+ }
+ }
+ }
}
1.2 +39 -29
xml-axis-wsif/java/src/org/apache/wsif/schema/SequenceElement.java
Index: SequenceElement.java
===================================================================
RCS file:
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/SequenceElement.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SequenceElement.java 15 Oct 2002 15:33:12 -0000 1.1
+++ SequenceElement.java 14 Nov 2002 16:23:16 -0000 1.2
@@ -54,45 +54,55 @@
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
-
+
package org.apache.wsif.schema;
+import java.io.Serializable;
+import java.util.Hashtable;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import com.ibm.wsdl.util.xml.DOMUtils;
/**
* A class to represent an <element> element defined within a
<sequence> element in a schema
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class SequenceElement {
- Element thisElement = null;
-
- /**
- * Constructor
- * @param el The dom element for this element within a sequence
- */
- SequenceElement(Element el) {
- thisElement = el;
- }
+public class SequenceElement extends ElementType implements Serializable {
- /**
- * Get the value of a specified attribute on this element
- * @param The name of the attribute
- * @return The value of the attribute or null if the attribute does not exist
- */
- QName getXMLAttribute(String name) {
- return SchemaType.getAttributeQName(thisElement, name);
- }
-
- /**
- * Get the value of a specified attribute on this element when the attribute
name is
- * a QName
- * @param The name of the attribute
- * @return The value of the attribute or null if the attribute does not exist
- */
- QName getXMLAttribute(QName name) {
- return SchemaType.getAttributeQName(thisElement, name);
- }
+ static final long serialVersionUID = 1L;
+
+ Hashtable attributes = new Hashtable();
+
+ /**
+ * Constructor
+ * @param el The dom element for this element within a sequence
+ */
+ SequenceElement(Element el, String tns) {
+ super(el, tns);
+ getAllAttributes(el, null, attributes);
+ }
+
+ /**
+ * Get the value of a specified attribute on this element
+ * @param The name of the attribute
+ * @return The value of the attribute or null if the attribute does not exist
+ */
+ QName getXMLAttribute(String name) {
+ return (QName) attributes.get(new QName(name));
+ }
+
+ /**
+ * Get the value of a specified attribute on this element when the attribute
name is
+ * a QName
+ * @param The name of the attribute
+ * @return The value of the attribute or null if the attribute does not exist
+ */
+ QName getXMLAttribute(QName name) {
+ return (QName) attributes.get(name);
+ }
}
1.3 +10 -6 xml-axis-wsif/java/src/org/apache/wsif/schema/Restriction.java
Index: Restriction.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/Restriction.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Restriction.java 11 Nov 2002 16:03:08 -0000 1.2
+++ Restriction.java 14 Nov 2002 16:23:16 -0000 1.3
@@ -57,6 +57,7 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
import java.util.ArrayList;
import javax.xml.namespace.QName;
@@ -70,7 +71,10 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class Restriction {
+public class Restriction implements Serializable {
+
+ static final long serialVersionUID = 1L;
+
QName base = null;
ArrayList attributes = new ArrayList();
ArrayList sequenceElements = new ArrayList();
@@ -79,7 +83,7 @@
* Constructor
* @param el The dom element for this restriction
*/
- Restriction(Element el) {
+ Restriction(Element el, String tns) {
base = SchemaType.getAttributeQName(el, "base");
NodeList children = el.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
@@ -88,9 +92,9 @@
Element subEl = (Element) child;
String elType = subEl.getLocalName();
if (elType.equals("attribute")) {
- attributes.add(new Attribute(subEl));
+ attributes.add(new Attribute(subEl, tns));
} else if (elType.equals("sequence")) {
- parseSequenceElements(subEl);
+ parseSequenceElements(subEl, tns);
}
}
}
@@ -122,7 +126,7 @@
new SequenceElement[sequenceElements.size()]);
}
- private void parseSequenceElements(Element el) {
+ private void parseSequenceElements(Element el, String tns) {
NodeList children = el.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
@@ -130,7 +134,7 @@
Element subEl = (Element) child;
String elType = subEl.getLocalName();
if (elType.equals("element")) {
- sequenceElements.add(new SequenceElement(subEl));
+ sequenceElements.add(new SequenceElement(subEl, tns));
}
}
}
1.3 +47 -1 xml-axis-wsif/java/src/org/apache/wsif/schema/SchemaType.java
Index: SchemaType.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/SchemaType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SchemaType.java 8 Nov 2002 16:51:24 -0000 1.2
+++ SchemaType.java 14 Nov 2002 16:23:16 -0000 1.3
@@ -57,10 +57,15 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
import java.util.List;
+import java.util.Map;
+
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
import com.ibm.wsdl.util.xml.DOMUtils;
@@ -69,7 +74,7 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public abstract class SchemaType {
+public abstract class SchemaType implements Serializable {
/**
* Get a flag to indicate if this type is a complexType
@@ -230,5 +235,46 @@
return new QName(uri, name);
+ }
+
+ /**
+ * Get all the attributes from a given dom element
+ * @param element The dom element
+ * @param tns The targetNamespace used in resolving the attribute value
+ * @param attributes A map to populate with the attributes
+ * @return The map of QName pairs (attribute name -> attribute value) for all
the element's attributes
+ */
+ protected static void getAllAttributes(Element el, String tns, Map attributes) {
+ NamedNodeMap atts = el.getAttributes();
+ if (atts != null) {
+ for (int a = 0; a < atts.getLength(); a++) {
+ Node attribute = atts.item(a);
+ String ln = attribute.getLocalName();
+ String ns = attribute.getNamespaceURI();
+
+ String name = "";
+ if (ns != null) {
+ name = DOMUtils.getAttributeNS(el, ns, ln);
+ } else {
+ name = DOMUtils.getAttribute(el, ln);
+ }
+
+ int index = name.lastIndexOf(":");
+ String prefix = null;
+
+ if (index != -1) {
+ prefix = name.substring(0, index);
+ name = name.substring(index + 1);
+ }
+
+ String uri = null;
+ if (prefix != null || tns == null) {
+ uri = DOMUtils.getNamespaceURIFromPrefix(el, prefix);
+ } else {
+ uri = tns;
+ }
+ attributes.put(new QName(ns, ln) ,new QName(uri,
name));
+ }
+ }
}
}
1.4 +4 -1 xml-axis-wsif/java/src/org/apache/wsif/schema/Schema.java
Index: Schema.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/Schema.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Schema.java 8 Nov 2002 16:51:24 -0000 1.3
+++ Schema.java 14 Nov 2002 16:23:16 -0000 1.4
@@ -57,6 +57,7 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@@ -69,7 +70,9 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class Schema {
+public class Schema implements Serializable {
+
+ static final long serialVersionUID = 1L;
private String targetNamespace = "";
private ArrayList types = new ArrayList();
1.3 +4 -1 xml-axis-wsif/java/src/org/apache/wsif/schema/SimpleType.java
Index: SimpleType.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/SimpleType.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SimpleType.java 8 Nov 2002 16:51:24 -0000 1.2
+++ SimpleType.java 14 Nov 2002 16:23:16 -0000 1.3
@@ -57,6 +57,7 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
@@ -66,8 +67,10 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class SimpleType extends SchemaType {
+public class SimpleType extends SchemaType implements Serializable {
+ static final long serialVersionUID = 1L;
+
private String name = "";
private QName typeName = null;
1.2 +14 -8 xml-axis-wsif/java/src/org/apache/wsif/schema/Attribute.java
Index: Attribute.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/schema/Attribute.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Attribute.java 15 Oct 2002 15:33:12 -0000 1.1
+++ Attribute.java 14 Nov 2002 16:23:16 -0000 1.2
@@ -57,6 +57,9 @@
package org.apache.wsif.schema;
+import java.io.Serializable;
+import java.util.Hashtable;
+
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
@@ -66,15 +69,18 @@
*
* @author Owen Burroughs <[EMAIL PROTECTED]>
*/
-public class Attribute {
- Element thisElement = null;
+public class Attribute implements Serializable {
+
+ static final long serialVersionUID = 1L;
+
+ Hashtable attributes = new Hashtable();
/**
* Constructor
* @param el The dom element for this attribute
*/
- Attribute(Element el) {
- thisElement = el;
+ Attribute(Element el, String tns) {
+ SchemaType.getAllAttributes(el, null, attributes);
}
/**
@@ -83,8 +89,8 @@
* @return The value of the attribute or null if the attribute does not exist
*/
QName getXMLAttribute(String name) {
- return SchemaType.getAttributeQName(thisElement, name);
- }
+ return (QName) attributes.get(new QName(name));
+ }
/**
* Get the value of a specified attribute on this element when the attribute
name is
@@ -93,6 +99,6 @@
* @return The value of the attribute or null if the attribute does not exist
*/
QName getXMLAttribute(QName name) {
- return SchemaType.getAttributeQName(thisElement, name);
- }
+ return (QName) attributes.get(name);
+ }
}