You are viewing a plain text version of this content. The canonical link for it is here.
Posted to woden-dev@ws.apache.org by jk...@apache.org on 2005/09/14 12:21:49 UTC
svn commit: r280813 - in /incubator/woden/java/src/org/apache/woden:
internal/ internal/schema/ internal/wsdl20/ schema/ wsdl20/xml/
Author: jkaputin
Date: Wed Sep 14 03:21:32 2005
New Revision: 280813
URL: http://svn.apache.org/viewcvs?rev=280813&view=rev
Log:
Change schema model from Xerces XML Schema API to
ws-commons XmlSchema. Simplified the representation of
schemas in Woden by removing the notion of different
types of schema content models - now just XmlSchema
will be used (although it is currently just DOM based,
so may need further support for StAX based parsing).
Modified:
incubator/woden/java/src/org/apache/woden/internal/DOMWSDLReader.java
incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImpl.java
incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImportImpl.java
incubator/woden/java/src/org/apache/woden/internal/wsdl20/Constants.java
incubator/woden/java/src/org/apache/woden/schema/Schema.java
incubator/woden/java/src/org/apache/woden/schema/SchemaImport.java
incubator/woden/java/src/org/apache/woden/wsdl20/xml/TypesElement.java
Modified: incubator/woden/java/src/org/apache/woden/internal/DOMWSDLReader.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/DOMWSDLReader.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/internal/DOMWSDLReader.java (original)
+++ incubator/woden/java/src/org/apache/woden/internal/DOMWSDLReader.java Wed Sep 14 03:21:32 2005
@@ -20,10 +20,8 @@
import org.apache.woden.internal.util.dom.DOMUtils;
import org.apache.woden.internal.util.dom.QNameUtils;
import org.apache.woden.internal.wsdl20.Constants;
-import org.apache.woden.internal.wsdl20.extensions.*;
import org.apache.woden.schema.Schema;
import org.apache.woden.schema.SchemaImport;
-import org.apache.woden.wsdl20.extensions.*;
import org.apache.woden.wsdl20.xml.*;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
@@ -34,16 +32,7 @@
//JK temporary imports (pending TODOs)
-import com.ibm.wsdl.util.xml.DOM2Writer;
-
-import org.apache.xerces.dom3.bootstrap.DOMImplementationRegistry;
-import org.apache.xerces.xs.XSImplementation;
-import org.apache.xerces.xs.XSLoader;
-import org.apache.xerces.xs.XSModel;
-
-import org.w3c.dom.ls.DOMImplementationLS;
-import org.w3c.dom.ls.LSInput;
-
+import org.apache.axis.xsd.xml.schema.*; //TODO test ws-commons XmlSchema
import temp.WSDLException;
/**
@@ -203,101 +192,37 @@
}
/*
- * TODO Initial schema parsing is specific to XML Schema.
- * Need generic support for other type systems.
- * Consider extension architecture with serializer/deserializer.
- *
- * TODO For now, use XML Schema API (Xerces XSModel) to represent
- * schema and parse elements and types. This will create a Xerces
- * parser dependency on the Woden DOM implementation (rather than
- * just a JAXP/SAX/DOM API dependency). To be considered further.
+ * TODO Testing with ws-commons XmlSchema
*/
- private Schema parseSchemaInline(Element schemaEl,
+ private Schema parseSchema(Element schemaEl,
TypesElement desc)
throws WSDLException
{
SchemaImpl schema = new SchemaImpl();
+ schema.setId(DOMUtils.getAttribute(schemaEl, Constants.ATTR_ID));
+
schema.setTargetNamespace(
DOMUtils.getAttribute(schemaEl, Constants.ATTR_TARGET_NAMESPACE));
- //TODO the type system will depend on the WSDL doc so consider
- //parameterizing it. Fixed with an XML Schema constant for now.
+ XmlSchemaCollection xsc =
+ new XmlSchemaCollection();
- schema.setContentModel(Constants.TYPE_XS_API); //XML Schema API
+ XmlSchema xs = xsc.read(schemaEl);
- //TODO currently only the XSModel is stored in Schema.
- //The DOM element representing the schema is not stored.
- //Either might be useful to an application dealing
- //with the underlying types (e.g. generator tooling).
- //So consider changing Schema so that it stores both.
- //Perhaps using a Map with a ContentModel/Content pair.
+ schema.setSchemaContent(xs);
- try {
- //create an LSInput object to hold the schema string
- System.setProperty(DOMImplementationRegistry.PROPERTY,
- "org.apache.xerces.dom.DOMImplementationSourceImpl");
- DOMImplementationRegistry domRegistry =
- DOMImplementationRegistry.newInstance();
-
- DOMImplementationLS domImpl =
- (DOMImplementationLS)domRegistry.getDOMImplementation("LS");
-
- LSInput lsInput = domImpl.createLSInput();
-
- //store the schema as a string in the LSInput
- String schemaString = DOM2Writer.nodeToString(schemaEl);
- System.out.println(schemaString);
- lsInput.setStringData(schemaString);
-
- //Use DOM level 3 bootstrap to get an XSModel of the schema
- System.setProperty(DOMImplementationRegistry.PROPERTY,
- "org.apache.xerces.dom.DOMXSImplementationSourceImpl");
- DOMImplementationRegistry xsRegistry = DOMImplementationRegistry.newInstance();
-
- XSImplementation xsImpl =
- (XSImplementation) xsRegistry.getDOMImplementation("XS-Loader");
-
- XSLoader xsLoader = xsImpl.createXSLoader(null);
-
- XSModel xsModel = xsLoader.load(lsInput);
-
- schema.setContent(xsModel);
-
- /*
- * print out the schema elements
- *
- XSNamedMap xsNamedMap = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);
- System.out.println("\nInline schema elements (" + xsNamedMap.getLength() +"):");
- for(int i = 0; i < xsNamedMap.getLength(); i++)
- {
- System.out.println( (xsNamedMap.item(i)).getName() );
- }
- */
-
- } catch (Exception e) {
- // TODO consider appropriate exceptions
- e.printStackTrace();
- }
-
return schema;
+
}
/*
- * TODO Initial schema parsing is specific to XML Schema.
- * Need generic support for other type systems.
- * Consider extension architecture with serializer/deserializer.
- *
- * TODO For now, use XML Schema API (Xerces XSModel) to represent
- * schema and parse elements and types. This will create a Xerces
- * parser dependency on the Woden DOM implementation (rather than
- * just a JAXP/SAX/DOM API dependency). To be considered further.
+ * TODO Testing with ws-commons XmlSchema
*/
private SchemaImport parseSchemaImport(Element importEl,
TypesElement types)
throws WSDLException
{
- //TODO use extension architecture aka WSDL4J
SchemaImportImpl schemaImport = new SchemaImportImpl();
schemaImport.setNamespace(
@@ -306,48 +231,15 @@
schemaImport.setSchemaLocation(
DOMUtils.getAttribute(importEl, SchemaConstants.ATTR_SCHEMA_LOCATION));
- //TODO currently only the XSModel is stored in Schema.
- //The DOM element representing the schema is not stored.
- //Either might be useful to an application dealing
- //with the underlying types (e.g. generator tooling).
- //So consider changing Schema so that it stores both.
- //Perhaps using a Map with a ContentModel/Content pair.
- schemaImport.setContentModel(Constants.TYPE_XS_API); //XML Schema API
+ //TODO use SAX/DOM to get schema Element for this import
+ //and call parseSchema method to get Schema object to pass
+ //to the setSchema method. Or create and InputSource with
+ //the schema loc URI and use XmlSchemaCollection.read.
+ //schemaImport.setSchema(null);
- try {
- //Use DOM level 3 bootstrap to get an XSModel of the schema
- System.setProperty(DOMImplementationRegistry.PROPERTY,
- "org.apache.xerces.dom.DOMXSImplementationSourceImpl");
- DOMImplementationRegistry xsRegistry = DOMImplementationRegistry.newInstance();
-
- XSImplementation xsImpl =
- (XSImplementation) xsRegistry.getDOMImplementation("XS-Loader");
-
- XSLoader xsLoader = xsImpl.createXSLoader(null);
-
- String sloc = schemaImport.getSchemaLocation();
- XSModel xsModel = xsLoader.loadURI(sloc);
-
- schemaImport.setContent(xsModel);
-
- /*
- * print out the schema elements
- *
- XSNamedMap xsNamedMap = xsModel.getComponents(XSConstants.ELEMENT_DECLARATION);
- System.out.println("\nImported schema elements (" + xsNamedMap.getLength() +"):");
- for(int i = 0; i < xsNamedMap.getLength(); i++)
- {
- System.out.println( (xsNamedMap.item(i)).getName() );
- }
- */
-
- } catch (Exception e) {
- // TODO consider appropriate exceptions
- e.printStackTrace();
- }
-
return schemaImport;
+
}
/*
@@ -383,7 +275,7 @@
}
else if (SchemaConstants.XSD_SCHEMA_QNAME_LIST.contains(tempElType))
{
- types.addSchema(parseSchemaInline(tempEl, types));
+ types.addSchema(parseSchema(tempEl, types));
}
else
{
Modified: incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImpl.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImpl.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImpl.java (original)
+++ incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImpl.java Wed Sep 14 03:21:32 2005
@@ -5,8 +5,11 @@
import org.apache.woden.schema.Schema;
+import org.apache.axis.xsd.xml.schema.XmlSchema; //TODO test ws-commons XmlSchema
+
/**
- * A wrapper for a schema element.
+ * Represents a schema element such as <xs:schema> and
+ * stores the schema contents as a <code>XmlSchema</code> object.
*
* @author jkaputin@apache.org
*/
@@ -14,9 +17,18 @@
private String fTargetNamespace;
private String fId;
- private String fContentModel;
- private Object fContent;
+ private XmlSchema fSchemaContent;
+ public void setId(String id)
+ {
+ this.fId = id;
+ }
+
+ public String getId()
+ {
+ return this.fId;
+ }
+
/* (non-Javadoc)
* @see org.apache.woden.wsdl20.extensions.Schema#setTargetNamespace(java.lang.String)
*/
@@ -33,34 +45,14 @@
return this.fTargetNamespace;
}
- public void setId(String id)
+ public void setSchemaContent(XmlSchema xmlSchema)
{
- this.fId = id;
- }
-
- public String getId()
- {
- return this.fId;
- }
-
- public void setContentModel(String contentModel)
- {
- this.fContentModel = contentModel;
+ this.fSchemaContent = xmlSchema;
}
- public String getContentModel()
+ public XmlSchema getSchemaContent()
{
- return this.fContentModel;
+ return this.fSchemaContent;
}
- public void setContent(Object schemaContent)
- {
- this.fContent = schemaContent;
- }
-
- public Object getContent()
- {
- return this.fContent;
- }
-
}
Modified: incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImportImpl.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImportImpl.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImportImpl.java (original)
+++ incubator/woden/java/src/org/apache/woden/internal/schema/SchemaImportImpl.java Wed Sep 14 03:21:32 2005
@@ -3,10 +3,12 @@
*/
package org.apache.woden.internal.schema;
+import org.apache.woden.schema.Schema;
import org.apache.woden.schema.SchemaImport;
/**
- * A wrapper for a schema import element.
+ * Represents a schema import element such as <xs:import> and
+ * provides a reference to the imported <code>Schema</code> object.
*
* @author jkaputin@apache.org
*/
@@ -14,8 +16,7 @@
private String fNamespace = null;
private String fSchemaLocation = null;
- private String fContentModel;
- private Object fContent;
+ private Schema fSchema;
/* (non-Javadoc)
* @see org.apache.woden.wsdl20.extensions.SchemaImport#setNamespace(java.lang.String)
@@ -50,23 +51,14 @@
return this.fSchemaLocation;
}
- public void setContentModel(String contentModel)
+ public void setSchema(Schema schema)
{
- this.fContentModel = contentModel;
+ this.fSchema = schema;
}
- public String getContentModel()
+ public Schema getSchema()
{
- return this.fContentModel;
+ return this.fSchema;
}
- public void setContent(Object importedSchemaContent)
- {
- this.fContent = importedSchemaContent;
- }
-
- public Object getContent()
- {
- return this.fContent;
- }
}
Modified: incubator/woden/java/src/org/apache/woden/internal/wsdl20/Constants.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/internal/wsdl20/Constants.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/internal/wsdl20/Constants.java (original)
+++ incubator/woden/java/src/org/apache/woden/internal/wsdl20/Constants.java Wed Sep 14 03:21:32 2005
@@ -3,6 +3,7 @@
*/
//TODO - consider separating common constants from 2.0 constants
+//TODO - check if any constants copied from w4j can be deleted
package org.apache.woden.internal.wsdl20;
@@ -89,6 +90,7 @@
// Attribute names.
+ public static final String ATTR_ID = "id";
public static final String ATTR_NAME = "name";
public static final String ATTR_TARGET_NAMESPACE = "targetNamespace";
public static final String ATTR_EXTENDS = "extends";
@@ -104,15 +106,6 @@
public static final String ATTR_BINDING = "binding";
public static final String ATTR_LOCATION = "address";
- //Type system or content model (API) used for the types
- public static final String TYPE_XSD_2001 =
- "http://www.w3.org/2001/XMLSchema";
- public static final String TYPE_DOM_API =
- "org.w3c.dom";
- public static final String TYPE_XS_API =
- "org.apache.xerces.xs"; //XML Schema API
-
-
//TODO determine if/how these needed
public static final String ATTR_XMLNS = "xmlns";
public static final String ATTR_NAMESPACE = "namespace";
Modified: incubator/woden/java/src/org/apache/woden/schema/Schema.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/schema/Schema.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/schema/Schema.java (original)
+++ incubator/woden/java/src/org/apache/woden/schema/Schema.java Wed Sep 14 03:21:32 2005
@@ -3,25 +3,20 @@
*/
package org.apache.woden.schema;
+import org.apache.axis.xsd.xml.schema.*; //TODO test ws-commons XmlSchema
+
/**
- * This interface represents the root schema element from any XML based
- * type system that supports the semantics of schema inlining and
- * schema importing. For example, in the W3C XML Schema type system
- * is represents the <xs:schema> element. For Relax NG, it
- * represents the <rng:grammar> element.
+ * This interface represents the a schema element from any XML based
+ * schema type system that supports schema inlining and importing.
+ * For example, in the W3C XML Schema type system it represents the
+ * <xs:schema> element. For Relax NG, it represents the
+ * <rng:grammar> element.
* <p>
- * A schema element may be parsed with various APIs and represent with
- * different schema object models. This interface acts as a wrapper for
- * the schema element. It exposes just the required targetNamespace attribute
- * and the id attribute, which is optional. The id attribute may be used to
- * distinguish multiple schemas with the same targetNamespace.
- * The schema element is wrapped as a java.lang.Object and
- * a content model indicator identifies which object model or API has been
- * used to represent the schema in memory. A client application needing to
- * process the underlying schema components can use this indicator to cast
- * the schema Object to the appropriate type. For example, if it indicates
- * that the DOM API has been used to represent the Schema, then the schema
- * Object should be cast to an org.w3c.dom.Element.
+ * This interface exposes the id and target namespace attributes of the
+ * schema element. The id attribute may be used to distinguish multiple
+ * schemas with the same targetNamespace (e.g. multiple schemas defining
+ * different elements and types from the same namespace). The actual
+ * schema content is represented as an <code>XmlSchema</code> object.
* <p>
* NOTE: non-XML type systems like DTD are not handled by this interface. They must be
* handled by WSDL 2.0 extension mechanisms.
@@ -34,16 +29,16 @@
*/
public interface Schema {
- public void setTargetNamespace(String namespace);
-
- public String getTargetNamespace();
-
public void setId(String id);
public String getId();
- public String getContentModel();
+ public void setTargetNamespace(String namespace);
+
+ public String getTargetNamespace();
+
+ public void setSchemaContent(XmlSchema xmlSchema);
- public Object getContent();
+ public XmlSchema getSchemaContent();
}
Modified: incubator/woden/java/src/org/apache/woden/schema/SchemaImport.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/schema/SchemaImport.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/schema/SchemaImport.java (original)
+++ incubator/woden/java/src/org/apache/woden/schema/SchemaImport.java Wed Sep 14 03:21:32 2005
@@ -4,23 +4,16 @@
package org.apache.woden.schema;
/**
- * This interface represents a schema import element from any XML based
- * type system that supports the semantics of schema inlining and
- * schema importing. For example, in the W3C XML Schema type system
- * it represents the <xs:import> element. For Relax NG, it
- * represents the <rng:include> element.
+ * This interface represents the import element from any XML based
+ * schema type system that supports schema inlining and importing.
+ * For example, in the W3C XML Schema type system it represents the
+ * <xs:import> element. For Relax NG, it represents the
+ * <rng:include> element.
* <p>
- * The interface exposes the required namespace attribute and the
- * optional schemaLocation attribute. The schemaLocation may be used
- * to distinguish multiple schema import elements with the same
- * namespace. The imported schema is wrapped as a java.lang.Object
- * and a content model indicator identifies which object model or API
- * has been used to represent the schema in memory. A client application
- * needing to process the underlying schema components can use this
- * indicator to cast the imported schema Object to the appropriate type.
- * For example, if it indicates that the DOM API has been used for the
- * schema content, then the imported schema Object should be cast to an
- * org.w3c.dom.Element.
+ * The interface exposes the import namespace and schemaLocation.
+ * The schemaLocation may be used to distinguish multiple schema imports
+ * from the same namespace. The interface also refers to a <code>Schema</code>
+ * representing the imported schema.
* <p>
* NOTE: non-XML type systems like DTD are not handled by this interface. They must be
* handled by WSDL 2.0 extension mechanisms.
@@ -41,7 +34,7 @@
public String getSchemaLocation();
- public String getContentModel();
+ public void setSchema(Schema importedSchema);
- public Object getContent();
+ public Schema getSchema();
}
Modified: incubator/woden/java/src/org/apache/woden/wsdl20/xml/TypesElement.java
URL: http://svn.apache.org/viewcvs/incubator/woden/java/src/org/apache/woden/wsdl20/xml/TypesElement.java?rev=280813&r1=280812&r2=280813&view=diff
==============================================================================
--- incubator/woden/java/src/org/apache/woden/wsdl20/xml/TypesElement.java (original)
+++ incubator/woden/java/src/org/apache/woden/wsdl20/xml/TypesElement.java Wed Sep 14 03:21:32 2005
@@ -8,35 +8,38 @@
import org.apache.woden.schema.Schema;
import org.apache.woden.schema.SchemaImport;
-
/**
- * This interface represents the XML element information item for
- * a WSDL 2.0 <types> element. It declares the behaviour required to
- * support parsing, creating and manipulating a <types> element.
+ * This interface represents the <wsdl:types> element.
+ * It supports parsing, creating and manipulating a <types> element.
* <p>
- * Note that it is valid for a <types> element to have multiple
- * imported schemas with the same namespace, so the schemaLocation
- * attribute may be used to distinguish them.
- * Likewise, it is valid to have multiple inline schemas (providing no
- * schema elements or types share the same names), so the id attribute
+ * The data types used in WSDL elements are typically defined within a
+ * <types> element using a type system such as W3C XML Schema.
+ * Schemas may be imported or inlined within <types>.
+ * A <types> element may contain multiple schema import elements with
+ * the same namespace attribute, so the schemaLocation attribute may be used
+ * to distinguish them.
+ * Likewise, it is valid to have multiple inline schemas, so the id attribute
* may be used to distinguish them.
*
- * TODO Initial type system support is specific to XML Schema.
- * Need generic support for other type systems.
- *
* @author jkaputin@apache.org
*/
public interface TypesElement extends WSDL20Element {
+ //TODO consider where in the API to query or set the type system used.
+
+ //Constant to indicate type system used is W3C XML Schema.
+ public static final String TYPESYSTEM_XSD_2001 =
+ "http://www.w3.org/2001/XMLSchema";
+
public void setDocumentationElement(DocumentationElement docEl);
public DocumentationElement getDocumentationElement();
/**
- * Indicate the type system used within the <types>
- * element. Typically the XML Schema type system will be
- * used, represented by the XML Schema namespace
- * "http://www.w3.org/2001/XMLSchema".
+ * Indicates the type system used within the <types> element.
+ * Typically the W3C XML Schema type system will be used, indicated by
+ * the namespace "http://www.w3.org/2001/XMLSchema". An alternative
+ * schema-like type system is Relax NG (http://www.relaxng.org/).
*/
public void setTypeSystem(String typeSystem);
@@ -49,11 +52,11 @@
/*
* Schema imports <xs:import> are stored in a Map of SchemaImport[]
* keyed by namespace. The schemaLocation attribute will distinguish
- * schemas imported with the same namespace.
+ * schemas imported from the same namespace.
*/
/**
- * Add a SchemaImport to the schemas imported within the <types> element.
+ * Add to the collection of schemas imported within the <types> element.
*/
public void addSchemaImport(SchemaImport schemaImport);
@@ -95,7 +98,7 @@
*/
/**
- * Add a Schema to the schemas defined inline within the <types> element.
+ * Add add to the collection of schemas inlined within the <types> element.
*/
public void addSchema(Schema schema);
---------------------------------------------------------------------
To unsubscribe, e-mail: woden-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: woden-dev-help@ws.apache.org