You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fr...@apache.org on 2006/08/02 19:54:10 UTC
svn commit: r428070 - in /incubator/tuscany/java/sdo/impl: ./
src/main/java/org/apache/tuscany/sdo/helper/
src/test/java/org/apache/tuscany/sdo/test/
Author: frankb
Date: Wed Aug 2 10:54:09 2006
New Revision: 428070
URL: http://svn.apache.org/viewvc?rev=428070&view=rev
Log:
TUSCANY-535 Tuscany-SDO-Impl-Patch-Jul-30.diff
Removed:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SDOAnnotationsDecorator.java
Modified:
incubator/tuscany/java/sdo/impl/pom.xml
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java
Modified: incubator/tuscany/java/sdo/impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/pom.xml?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/pom.xml (original)
+++ incubator/tuscany/java/sdo/impl/pom.xml Wed Aug 2 10:54:09 2006
@@ -82,37 +82,7 @@
<optional>true</optional>
</dependency>
- <!-- dependencies for optional AXIOM functions -->
- <dependency>
- <groupId>org.apache.ws.commons</groupId>
- <artifactId>XmlSchema</artifactId>
- <version>1.0.2</version>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>ws-commons</groupId>
- <artifactId>axiom-api</artifactId>
- <version>1.0</version>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>ws-commons</groupId>
- <artifactId>axiom-impl</artifactId>
- <version>1.0</version>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.0.4</version>
- <scope>provided</scope>
- <optional>true</optional>
- </dependency>
-
- <!-- dependencies for test cases -->
+ <!-- dependencies for test cases -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/SchemaBuilder.java Wed Aug 2 10:54:09 2006
@@ -1,8 +1,5 @@
package org.apache.tuscany.sdo.helper;
-import java.lang.reflect.Constructor;
-import java.util.Collection;
-import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
@@ -13,25 +10,26 @@
import javax.xml.namespace.QName;
import org.apache.tuscany.sdo.util.SDOUtil;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaAny;
-import org.apache.ws.commons.schema.XmlSchemaAnyAttribute;
-import org.apache.ws.commons.schema.XmlSchemaAttribute;
-import org.apache.ws.commons.schema.XmlSchemaChoice;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
-import org.apache.ws.commons.schema.XmlSchemaComplexContent;
-import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension;
-import org.apache.ws.commons.schema.XmlSchemaComplexType;
-import org.apache.ws.commons.schema.XmlSchemaContentProcessing;
-import org.apache.ws.commons.schema.XmlSchemaElement;
-import org.apache.ws.commons.schema.XmlSchemaGroupBase;
-import org.apache.ws.commons.schema.XmlSchemaImport;
-import org.apache.ws.commons.schema.XmlSchemaInclude;
-import org.apache.ws.commons.schema.XmlSchemaSequence;
-import org.apache.ws.commons.schema.XmlSchemaSimpleType;
-import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
+import org.eclipse.xsd.XSDAttributeDeclaration;
+import org.eclipse.xsd.XSDAttributeUse;
+import org.eclipse.xsd.XSDComplexTypeDefinition;
+import org.eclipse.xsd.XSDCompositor;
+import org.eclipse.xsd.XSDConstraint;
+import org.eclipse.xsd.XSDDerivationMethod;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDFactory;
+import org.eclipse.xsd.XSDForm;
+import org.eclipse.xsd.XSDImport;
+import org.eclipse.xsd.XSDInclude;
+import org.eclipse.xsd.XSDModelGroup;
+import org.eclipse.xsd.XSDParticle;
+import org.eclipse.xsd.XSDProcessContents;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDSchemaContent;
+import org.eclipse.xsd.XSDSimpleTypeDefinition;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.eclipse.xsd.XSDWildcard;
-import commonj.sdo.DataObject;
import commonj.sdo.Property;
import commonj.sdo.Type;
import commonj.sdo.helper.XSDHelper;
@@ -46,26 +44,21 @@
//public static final String GROUP = "group";
public static final String EFEATURE_MAP_ENTRY = "EFeatureMapEntry";
- protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
private Map schemaMap = null;
protected Map targetNamespacePrefixMap = new Hashtable();
protected Map schemaLocationMap = null;
protected TypeTable typeTable = null;
- protected Map sdoAnnoMap = new Hashtable();
+ protected XSDFactory xsdFactory = XSDFactory.eINSTANCE;
- protected SchemaBuilder(XmlSchemaCollection schemaCollection,
- Map schemaMap,
- Map nsPrefixMap,
- TypeTable typeTable,
- Map annotationMap,
- Map schemaLocMap )
+ protected SchemaBuilder(Map schemaMap,
+ Map nsPrefixMap,
+ TypeTable typeTable,
+ Map schemaLocMap )
{
this.schemaMap = schemaMap;
- this.xmlSchemaCollection = schemaCollection;
this.targetNamespacePrefixMap = nsPrefixMap;
this.typeTable = typeTable;
- this.sdoAnnoMap = annotationMap;
this.schemaLocationMap = schemaLocMap;
}
@@ -73,10 +66,11 @@
private QName addAttribute2ComplexType(String targetNamespace,
- XmlSchemaComplexType complexType,
+ XSDComplexTypeDefinition complexType,
Property aProperty)
{
QName attributeSchemaType = null;
+ String prefix = null;
try
{
@@ -92,60 +86,76 @@
if ( aProperty.getType().isDataType() )
{
typeTable.addSimpleSchemaType(aProperty.getType().getName(), attributeSchemaType);
+
+ XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
+ simpleType.setName(aProperty.getType().getName());
+ simpleType.setTargetNamespace(aProperty.getType().getURI());
+ typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(),
+ attributeSchemaType.getLocalPart(),
+ simpleType);
}
else
{
typeTable.addComplexSchemaType(aProperty.getType().getURI(),
aProperty.getType().getName(),
attributeSchemaType);
+
+ XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
+ extComplexType.setName(aProperty.getType().getName());
+ extComplexType.setTargetNamespace(aProperty.getType().getURI());
+ typeTable.addXSDTypeDef(attributeSchemaType.getNamespaceURI(),
+ attributeSchemaType.getLocalPart(),
+ extComplexType);
}
-
includeExtXSD(aProperty.getType());
}
+ //ensure than an import is done rightaway so that the right prefixes will be used by the
+ //attribute whose type is set as 'this type'. Otherwise when setting the type for the attribute
+ //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
+ prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), attributeSchemaType);
- XmlSchemaAttribute attribute = new XmlSchemaAttribute();
+ XSDAttributeDeclaration attribute = xsdFactory.createXSDAttributeDeclaration();
attribute.setName(aProperty.getName());
+ XSDAttributeUse orderDateAttributeUse = xsdFactory.createXSDAttributeUse();
+ orderDateAttributeUse.setContent(attribute);
+ complexType.getAttributeContents().add(orderDateAttributeUse);
+ attribute.updateElement();
- if ( !aProperty.getAliasNames().isEmpty() )
+ if ( aProperty.getType().isDataType() )
{
- addAliasNamesAnnotation(targetNamespace, aProperty.getAliasNames(), ATTRIBUTE, aProperty.getName());
+ attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(attributeSchemaType.getNamespaceURI(),
+ attributeSchemaType.getLocalPart()));
+
}
-
- if ( aProperty.isReadOnly() )
+ else
{
- addReadOnlyAnnotation(targetNamespace, aProperty.isReadOnly(), ATTRIBUTE, aProperty.getName());
+ attribute.setTypeDefinition((XSDSimpleTypeDefinition)typeTable.getXSDTypeDef(
+ typeTable.getSimpleSchemaTypeName("URI").getNamespaceURI(),
+ typeTable.getSimpleSchemaTypeName("URI").getLocalPart()));
+
}
if ( aProperty.getDefault() != null )
{
- attribute.setDefaultValue(aProperty.getDefault().toString());
+ attribute.setConstraint(XSDConstraint.DEFAULT_LITERAL);
+ attribute.setLexicalValue(aProperty.getDefault().toString());
}
-
- if ( aProperty.getType().isDataType() )
- {
- attribute.setSchemaTypeName(attributeSchemaType);
- }
- else
+
+ addAnnotations(attribute, aProperty );
+ if ( !aProperty.getType().isDataType() )
{
- attribute.setSchemaTypeName(typeTable.getSimpleSchemaTypeName("URI"));
- //addPropertyTypeAnnotation(targetNamespace, attributeSchemaType, ATTRIBUTE, aProperty.getName());
+ String value = prefix + COLON + attributeSchemaType.getLocalPart();
+ attribute.getElement().setAttribute(PROPERTY_TYPE, value);
}
- if ( aProperty.getOpposite() != null )
- {
- addOppositePropertyAnnotation(targetNamespace,
- aProperty.getOpposite().getName(),
- ATTRIBUTE,
- aProperty.getName());
- }
- complexType.getAttributes().add(attribute);
return attributeSchemaType;
}
private QName addElement2ComplexType(String targetNamespace,
- XmlSchemaComplexType complexType,
+ XSDComplexTypeDefinition complexType,
Property aProperty)
{
+ String prefix = null;
QName elementSchemaType = null;
try
{
@@ -161,67 +171,99 @@
if ( aProperty.getType().isDataType() )
{
typeTable.addSimpleSchemaType(aProperty.getType().getName(), elementSchemaType);
+
+ XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
+ simpleType.setName(aProperty.getType().getName());
+ simpleType.setTargetNamespace(aProperty.getType().getURI());
+ typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(),
+ elementSchemaType.getLocalPart(),
+ simpleType);
}
else
{
typeTable.addComplexSchemaType(aProperty.getType().getURI(),
aProperty.getType().getName(),
elementSchemaType);
+ XSDComplexTypeDefinition extComplexType = xsdFactory.createXSDComplexTypeDefinition();
+ extComplexType.setName(aProperty.getType().getName());
+ extComplexType.setTargetNamespace(aProperty.getType().getURI());
+ typeTable.addXSDTypeDef(elementSchemaType.getNamespaceURI(),
+ elementSchemaType.getLocalPart(),
+ extComplexType);
}
includeExtXSD(aProperty.getType());
}
- XmlSchemaElement element = new XmlSchemaElement();
- element.setName(aProperty.getName());
+ //ensure than an import is done rightaway so that the right prefixes will be used by the
+ //element whose type is set as 'this type'. Otherwise when setting the type for the element
+ //there will be a duplicate prefix (like Q1 or Q2... ) that will be created
+ prefix = addImports((XSDSchema)schemaMap.get(targetNamespace), elementSchemaType);
- if ( !aProperty.getAliasNames().isEmpty() )
- {
- addAliasNamesAnnotation(targetNamespace, aProperty.getAliasNames(), ELEMENT, aProperty.getName());
- }
+ //XmlSchemaElement element = new XmlSchemaElement();
+ XSDElementDeclaration element = xsdFactory.createXSDElementDeclaration();
+ element.setName(aProperty.getName());
+
+ XSDParticle aParticle = xsdFactory.createXSDParticle();
+ aParticle.setContent(element);
- if ( aProperty.isReadOnly() )
- {
- addReadOnlyAnnotation(targetNamespace, aProperty.isReadOnly(), ELEMENT, aProperty.getName());
- }
+ ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
+ getContents().add(aParticle);
+ element.updateElement();
+
if ( aProperty.isMany() )
{
- element.setMaxOccurs(Long.MAX_VALUE);
- element.setMinOccurs(0);
+ aParticle.setMaxOccurs(-1);
+ aParticle.setMinOccurs(0);
+
}
if ( aProperty.isContainment() )
{
- element.setSchemaTypeName(elementSchemaType);
+ element.setTypeDefinition(typeTable.getXSDTypeDef(elementSchemaType.getNamespaceURI(),
+ elementSchemaType.getLocalPart()));
}
else
{
if ( !aProperty.getType().isDataType() )
{
- element.setSchemaTypeName(typeTable.getSimpleSchemaTypeName("URI"));
- //addPropertyTypeAnnotation(targetNamespace, elementSchemaType, ELEMENT, aProperty.getName());
-
+ QName qName = typeTable.getSimpleSchemaTypeName("URI");
+ element.setTypeDefinition(typeTable.getXSDTypeDef(qName.getNamespaceURI(),
+ qName.getLocalPart()));
}
}
- if ( aProperty.getOpposite() != null )
+ addAnnotations(element, aProperty);
+ if ( !aProperty.isContainment() && !aProperty.getType().isDataType() )
{
- addOppositePropertyAnnotation(targetNamespace,
- aProperty.getOpposite().getName(),
- ELEMENT,
- aProperty.getName());
+ String value = prefix + COLON + elementSchemaType.getLocalPart();
+ element.getElement().setAttribute(PROPERTY_TYPE, value);
}
-
- ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(element);
-
return elementSchemaType;
}
+ private void addAnnotations(XSDSchemaContent xsdContent, Property aProperty)
+ {
+ if ( !aProperty.getAliasNames().isEmpty() )
+ {
+ addAliasNamesAnnotation(xsdContent, aProperty.getAliasNames());
+ }
+
+ if ( aProperty.isReadOnly() )
+ {
+ xsdContent.getElement().setAttribute(READ_ONLY, Boolean.toString(aProperty.isReadOnly()));
+ }
+
+ if ( aProperty.getOpposite() != null )
+ {
+ xsdContent.getElement().setAttribute(OPPOSITE_PROPERTY, aProperty.getOpposite().getName());
+ }
+ }
private QName buildComplexSchemaTypeContents(String targetNamespace,
- XmlSchemaComplexType complexType,
+ XSDComplexTypeDefinition complexType,
Type dataType)
{
//clipProperties(dataType);
@@ -236,34 +278,10 @@
if ( aProperty.isContainment() || aProperty.isMany() || !aProperty.getType().isDataType() )
{
propertySchemaTypeName = addElement2ComplexType(targetNamespace, complexType, aProperty);
- String prefix = addImports((XmlSchema)schemaMap.get(targetNamespace), propertySchemaTypeName);
-
- //need to do this only after adding imports to ensure the right namespace prefix is used
- if ( !aProperty.isContainment() && !aProperty.getType().isDataType() )
- {
- addPropertyTypeAnnotation(targetNamespace,
- prefix,
- aProperty.getType().getName(),
- ELEMENT,
- aProperty.getName());
-
- }
-
}
else
{
propertySchemaTypeName = addAttribute2ComplexType(targetNamespace, complexType, aProperty);
- String prefix = addImports((XmlSchema)schemaMap.get(targetNamespace), propertySchemaTypeName);
-
- //need to do this only after adding imports to ensure the right namespace prefix is used
- if ( !aProperty.getType().isDataType() )
- {
- addPropertyTypeAnnotation(targetNamespace,
- prefix,
- aProperty.getType().getName(),
- ATTRIBUTE,
- aProperty.getName());
- }
}
/*if ( !EFEATURE_MAP_ENTRY.equals(aProperty.getType().getName()) )
@@ -283,92 +301,98 @@
if ( !dataType.isDataType() &&
(complexSchemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName())) == null )
{
+ XSDSchema xmlSchema = getXmlSchema(dataType);
String targetNamespace = dataType.getURI();
- XmlSchema xmlSchema = getXmlSchema(dataType);
-
String targetNamespacePrefix = (String)targetNamespacePrefixMap.get(targetNamespace);
+
complexSchemaTypeName = new QName(targetNamespace,
dataType.getName(),
targetNamespacePrefix);
-
- XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema);
+ XSDComplexTypeDefinition complexType = xsdFactory.createXSDComplexTypeDefinition();
complexType.setName(dataType.getName());
+ complexType.setTargetNamespace(targetNamespace);
complexType.setAbstract(dataType.isAbstract());
- //add annotations for alias names
- if ( !dataType.getAliasNames().isEmpty() )
- {
- addAliasNamesAnnotation(targetNamespace,
- dataType.getAliasNames(),
- COMPLEX_TYPE,
- dataType.getName());
- }
- //add annotations for java instance class
- if ( dataType.getInstanceClass() != null )
- {
- addInstanceClassAnnotation(targetNamespace,
- dataType.getInstanceClass().getName(),
- COMPLEX_TYPE,
- dataType.getName());
- }
+ xmlSchema.getTypeDefinitions().add(complexType);
+ xmlSchema.getContents().add(complexType);
+
+ complexType.updateElement();
+
+ addAnnotations(complexType, dataType);
handleBaseExtn(xmlSchema, dataType, complexType);
handleSDOSequence(dataType, complexType);
handleSDOOpenType(dataType, complexType);
- createGlobalElement(xmlSchema, complexType, complexSchemaTypeName);
- xmlSchema.getItems().add(complexType);
- xmlSchema.getSchemaTypes().add(complexSchemaTypeName, complexType);
+ //add before constructing the contents because a content element could
+ //possibly be of type 'complexType'.
typeTable.addComplexSchemaType(dataType.getURI(), dataType.getName(), complexSchemaTypeName);
+ typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), complexType);
+ //now compose the contents for this complex type
buildComplexSchemaTypeContents(targetNamespace, complexType, dataType);
+
+ //finally create a global element for this type
+ createGlobalElement(xmlSchema, complexType, complexSchemaTypeName);
}
return complexSchemaTypeName;
}
+ private void addAnnotations(XSDTypeDefinition xsdType, Type dataType)
+ {
+ if ( dataType.isAbstract() )
+ {
+ if ( xsdType instanceof XSDComplexTypeDefinition )
+ {
+ ((XSDComplexTypeDefinition)xsdType).setAbstract(dataType.isAbstract());
+ }
+ else
+ {
+ xsdType.getElement().setAttribute(ABSTRACT_TYPE,
+ Boolean.toString(dataType.isAbstract()));
+ }
+ }
+
+ //add alias names if it exists
+ addAliasNamesAnnotation(xsdType,
+ dataType.getAliasNames());
+
+ //add instanceClass annotation
+ if ( dataType.getInstanceClass() != null )
+ {
+ xsdType.getElement().setAttribute(INSTANCE_CLASS, dataType.getInstanceClass().getName());
+ }
+ }
+
+
private QName buildSimpleSchemaType(Type dataType)
{
QName simpleSchemaTypeName = null;
if ( dataType.isDataType() &&
(simpleSchemaTypeName = typeTable.getSimpleSchemaTypeName(dataType.getName()) ) == null )
{
- XmlSchema xmlSchema = getXmlSchema(dataType);
- XmlSchemaSimpleType simpleType = new XmlSchemaSimpleType(xmlSchema);
+ XSDSchema xmlSchema = getXmlSchema(dataType);
+ XSDSimpleTypeDefinition simpleType = xsdFactory.createXSDSimpleTypeDefinition();
//set the name
simpleType.setName(dataType.getName());
+ simpleType.setTargetNamespace(dataType.getURI());
//set abstract=true if abstract
- if ( dataType.isAbstract() )
- {
- addAbstractTypeAnnotation(dataType.getURI(),
- dataType.isAbstract(),
- SIMPLE_TYPE,
- dataType.getName());
- }
-
- //add alias names if it exists
- addAliasNamesAnnotation(dataType.getURI(),
- dataType.getAliasNames(),
- SIMPLE_TYPE,
- dataType.getName());
-
- //add instanceClass annotation
- if ( dataType.getInstanceClass() != null )
- {
- addInstanceClassAnnotation(dataType.getURI(),
- dataType.getInstanceClass().getName(),
- SIMPLE_TYPE,
- dataType.getName());
- }
+ simpleSchemaTypeName = new QName(dataType.getURI(),
+ dataType.getName(),
+ (String)targetNamespacePrefixMap.get(dataType.getURI()));
+ xmlSchema.getContents().add(simpleType);
+ simpleType.updateElement();
+
+ addAnnotations(simpleType, dataType);
if ( !dataType.getBaseTypes().isEmpty() )
{
Type baseType = (Type)dataType.getBaseTypes().get(0);
- XmlSchemaSimpleTypeRestriction restriction = new XmlSchemaSimpleTypeRestriction();
-
QName baseSchemaType = null;
+
try
{
baseSchemaType = buildSchema(baseType);
@@ -379,20 +403,26 @@
baseSchemaType = new QName(baseType.getURI(),
baseType.getName(),
generatePrefix());
+
+ typeTable.addSimpleSchemaType(baseType.getName(), baseSchemaType);
+
+ XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
+ baseTypeDef.setName(baseType.getName());
+ baseTypeDef.setTargetNamespace(baseType.getURI());
+ typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
+
//include external XSD locations
includeExtXSD(baseType);
}
- restriction.setBaseTypeName(baseSchemaType);
- simpleType.setContent(restriction);
+ simpleType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+ getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
addImports(xmlSchema, baseSchemaType);
}
- simpleSchemaTypeName = new QName(dataType.getURI(),
- dataType.getName(),
- (String)targetNamespacePrefixMap.get(dataType.getURI()));
- xmlSchema.getSchemaTypes().add(simpleSchemaTypeName, simpleType);
+
typeTable.addSimpleSchemaType(dataType.getName(), simpleSchemaTypeName);
+ typeTable.addXSDTypeDef(dataType.getURI(), dataType.getName(), simpleType);
}
return simpleSchemaTypeName;
}
@@ -402,7 +432,7 @@
//now we know there is a type for which the xsd must come from outside
//create a schema for the namespace of this type and add an include in it for
//the xsd that is defined externally
- XmlSchema xmlSchema = getXmlSchema(dataType);
+ XSDSchema xmlSchema = getXmlSchema(dataType);
//ideally there could be more than one external schema defintions for a namespace
//and hence schemalocations will be a list of locations
@@ -422,7 +452,8 @@
schemaLocations.add(DEFAULT_SCHEMA_LOCATION);
}
- Iterator includesIterator = xmlSchema.getIncludes().getIterator();
+ Object schemaContent = null;
+ Iterator includesIterator = xmlSchema.getContents().iterator();
Iterator schemaLocIterator = schemaLocations.iterator();
String aSchemaLocation = null;
boolean includeExists = false;
@@ -432,20 +463,23 @@
aSchemaLocation = (String)schemaLocIterator.next();
while ( includesIterator.hasNext() )
{
- if ( !includeExists && aSchemaLocation.equals(
- ((XmlSchemaInclude)includesIterator.next()).getSchemaLocation()
- ))
+ schemaContent = includesIterator.next();
+ if ( schemaContent instanceof XSDInclude )
{
- includeExists = true;
+ if ( !includeExists && aSchemaLocation.equals(
+ ((XSDInclude)schemaContent).getSchemaLocation()
+ ))
+ {
+ includeExists = true;
+ }
}
}
if ( !includeExists )
{
- XmlSchemaInclude includeElement = new XmlSchemaInclude();
+ XSDInclude includeElement = xsdFactory.createXSDInclude();
includeElement.setSchemaLocation(aSchemaLocation);
- xmlSchema.getIncludes().add(includeElement);
- xmlSchema.getItems().add(includeElement);
+ xmlSchema.getContents().add(0, includeElement);
}
}
}
@@ -490,34 +524,42 @@
}
- private XmlSchema getXmlSchema(Type dataType)
+ private XSDSchema getXmlSchema(Type dataType)
{
- XmlSchema xmlSchema;
+ XSDSchema xmlSchema = null;
- if ((xmlSchema = (XmlSchema) schemaMap.get(dataType.getURI())) == null)
+ if ((xmlSchema = (XSDSchema) schemaMap.get(dataType.getURI())) == null)
{
String targetNamespacePrefix = generatePrefix();
- xmlSchema = new XmlSchema(dataType.getURI(), xmlSchemaCollection);
+ xmlSchema = xsdFactory.createXSDSchema();
+ xmlSchema.setTargetNamespace(dataType.getURI());
+ xmlSchema.setAttributeFormDefault(XSDForm.QUALIFIED_LITERAL);
+ xmlSchema.setElementFormDefault(XSDForm.QUALIFIED_LITERAL);
+
targetNamespacePrefixMap.put(dataType.getURI(), targetNamespacePrefix);
schemaMap.put(dataType.getURI(), xmlSchema);
- Hashtable prefixmap = new Hashtable();
- prefixmap.put(TypeTable.XS_URI_PREFIX, TypeTable.XML_SCHEMA_URI);
- prefixmap.put(targetNamespacePrefix, dataType.getURI());
- xmlSchema.setPrefixToNamespaceMap(prefixmap);
+ xmlSchema.getQNamePrefixToNamespaceMap().put(TypeTable.XS_URI_PREFIX, TypeTable.XML_SCHEMA_URI);
+ xmlSchema.setSchemaForSchemaQNamePrefix(TypeTable.XS_URI_PREFIX);
+
+ xmlSchema.getQNamePrefixToNamespaceMap().put(targetNamespacePrefix, dataType.getURI());
+ //xmlSchema.setSchemaForSchemaQNamePrefix(targetNamespacePrefix);
addSDONamespaces(xmlSchema);
- addPackageAnnotation(dataType);
+ addPackageAnnotation(xmlSchema, dataType);
}
return xmlSchema;
}
- private void addSDONamespaces(XmlSchema xmlSchema)
+ private void addSDONamespaces(XSDSchema xmlSchema)
{
- xmlSchema.getPrefixToNamespaceMap().put(COMMONJ_SDO_NS_PREFIX, COMMONJ_SDO_NS);
- xmlSchema.getPrefixToNamespaceMap().put(SDO_JAVA_NS_PREFIX, SDO_JAVA_NS);
+ xmlSchema.getQNamePrefixToNamespaceMap().put(COMMONJ_SDO_NS_PREFIX, COMMONJ_SDO_NS);
+ //xmlSchema.setSchemaForSchemaQNamePrefix(COMMONJ_SDO_NS_PREFIX);
+
+ xmlSchema.getQNamePrefixToNamespaceMap().put(SDO_JAVA_NS_PREFIX, SDO_JAVA_NS);
+ //xmlSchema.setSchemaForSchemaQNamePrefix(SDO_JAVA_NS_PREFIX);
}
@@ -539,15 +581,16 @@
}
}
- private String addImports(XmlSchema xmlSchema, QName schemaTypeName)
+ private String addImports(XSDSchema xmlSchema, QName schemaTypeName)
{
String prefix = null;
- Enumeration enumeration = xmlSchema.getPrefixToNamespaceMap().keys();
- while ( enumeration.hasMoreElements() )
+ Iterator iterator = xmlSchema.getQNamePrefixToNamespaceMap().keySet().iterator();
+ while ( iterator.hasNext() )
{
- prefix = (String)enumeration.nextElement();
+ prefix = (String)iterator.next();
+
if ( schemaTypeName.getNamespaceURI().equals(
- xmlSchema.getPrefixToNamespaceMap().get(prefix)) )
+ xmlSchema.getQNamePrefixToNamespaceMap().get(prefix)) )
{
return prefix;
}
@@ -555,24 +598,30 @@
//the following lines are executed only if a prefix was not found which implies that the
//schemaTypeName was not imported earlier and also it does not belong to the targetnamespace
- String schemaLocation = null;
- XmlSchemaImport importElement = new XmlSchemaImport();
+ XSDImport importElement = xsdFactory.createXSDImport();
importElement.setNamespace(schemaTypeName.getNamespaceURI());
- xmlSchema.getItems().add(importElement);
- prefix = generatePrefix();
- xmlSchema.getPrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
+ xmlSchema.getContents().add(0, importElement);
+ prefix = schemaTypeName.getPrefix();
+ if ( prefix == null || prefix.length() <= 0 )
+ {
+ prefix = generatePrefix();
+ }
+ xmlSchema.getQNamePrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
return prefix;
}
- private void handleSDOSequence(Type datatype, XmlSchemaComplexType complexType)
+ private void handleSDOSequence(Type datatype, XSDComplexTypeDefinition complexType)
{
if ( datatype.isSequenced() )
{
complexType.setMixed(true);
- XmlSchemaChoice choice = new XmlSchemaChoice();
- choice.setMaxOccurs(Long.MAX_VALUE);
- complexType.setParticle(choice);
+ XSDModelGroup choice = xsdFactory.createXSDModelGroup();
+ choice.setCompositor(XSDCompositor.CHOICE_LITERAL);
+ XSDParticle aParticle = xsdFactory.createXSDParticle();
+ aParticle.setContent(choice);
+ aParticle.setMaxOccurs(-1);
+ complexType.setContent(aParticle);
}
else
{
@@ -585,32 +634,40 @@
}
else*/
{
- XmlSchemaSequence sequence = new XmlSchemaSequence();
- complexType.setParticle(sequence);
+ XSDModelGroup sequence = xsdFactory.createXSDModelGroup();
+ sequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL);
+ XSDParticle aParticle = xsdFactory.createXSDParticle();
+ aParticle.setContent(sequence);
+ complexType.setContent(aParticle);
}
}
}
- private void handleSDOOpenType(Type datatype, XmlSchemaComplexType complexType)
+ private void handleSDOOpenType(Type datatype, XSDComplexTypeDefinition complexType)
{
if ( datatype.isOpen() /*&&
getPropertyStartsWithName(datatype.getDeclaredProperties(), GROUP).size() <= 0 */)
{
- XmlSchemaAny anyType = new XmlSchemaAny();
- XmlSchemaContentProcessing cp = new XmlSchemaContentProcessing("lax");
- anyType.setProcessContent(new XmlSchemaContentProcessing("lax"));
- anyType.setMaxOccurs(Long.MAX_VALUE);
- ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(anyType);
-
- XmlSchemaAnyAttribute anyAttr = new XmlSchemaAnyAttribute();
- anyAttr.setProcessContent(new XmlSchemaContentProcessing("lax"));
- complexType.setAnyAttribute(anyAttr);
+ XSDWildcard elementWildcard = xsdFactory.createXSDWildcard();
+ elementWildcard.getLexicalNamespaceConstraint().add("##other");
+ elementWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
+ // Create a particle to hold the wildcard.
+ XSDParticle wildcardParticle = xsdFactory.createXSDParticle();
+ wildcardParticle.setContent(elementWildcard);
+ wildcardParticle.setMaxOccurs(-1);
+ ((XSDModelGroup)((XSDParticle)complexType.getContent()).getContent()).
+ getContents().add(wildcardParticle);
+
+ XSDWildcard attributeWildcard = xsdFactory.createXSDWildcard();
+ attributeWildcard.getLexicalNamespaceConstraint().add("##other");
+ attributeWildcard.setProcessContents(XSDProcessContents.LAX_LITERAL);
+ complexType.setAttributeWildcard(attributeWildcard);
}
}
- private void handleBaseExtn(XmlSchema xmlSchema,
+ private void handleBaseExtn(XSDSchema xmlSchema,
Type datatype,
- XmlSchemaComplexType complexType)
+ XSDComplexTypeDefinition complexType)
{
if ( datatype.getBaseTypes().size() > 0 )
{
@@ -628,14 +685,32 @@
baseSchemaType = new QName(baseType.getURI(),
baseType.getName(),
generatePrefix());
+
+ XSDSimpleTypeDefinition baseTypeDef = xsdFactory.createXSDSimpleTypeDefinition();
+ baseTypeDef.setName(baseType.getName());
+ baseTypeDef.setTargetNamespace(baseType.getURI());
+ typeTable.addXSDTypeDef(baseType.getURI(), baseType.getName(), baseTypeDef);
+
includeExtXSD(baseType);
}
+
+ complexType.setDerivationMethod(XSDDerivationMethod.EXTENSION_LITERAL);
+
+ if ( baseType.isDataType() )
+ {
+ XSDSimpleTypeDefinition anonymousSimpleTypeDefinition
+ = xsdFactory.createXSDSimpleTypeDefinition();
+ anonymousSimpleTypeDefinition.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+ getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
+ complexType.setContent(anonymousSimpleTypeDefinition);
+ }
+ else
+ {
+ complexType.setBaseTypeDefinition((XSDSimpleTypeDefinition)typeTable.
+ getXSDTypeDef(baseSchemaType.getNamespaceURI(),baseSchemaType.getLocalPart()));
+
+ }
- XmlSchemaComplexContent complexContent = new XmlSchemaComplexContent();
- XmlSchemaComplexContentExtension compContExtn = new XmlSchemaComplexContentExtension();
- compContExtn.setBaseTypeName(baseSchemaType);
- complexContent.setContent(compContExtn);
- complexType.setContentModel(complexContent);
addImports(xmlSchema, baseSchemaType);
}
}
@@ -646,30 +721,22 @@
return typeName.replaceFirst(firstChar, firstChar.toLowerCase());
}
- private void createGlobalElement(XmlSchema xmlSchema, XmlSchemaComplexType complexType, QName elementName )
+ private void createGlobalElement(XSDSchema xmlSchema,
+ XSDComplexTypeDefinition complexType,
+ QName schemaElementName )
{
- XmlSchemaElement globalElement = new XmlSchemaElement();
- globalElement.setSchemaTypeName(complexType.getQName());
+ XSDElementDeclaration globalElement = xsdFactory.createXSDElementDeclaration();
+ globalElement.setTargetNamespace(xmlSchema.getTargetNamespace());
globalElement.setName(formGlobalElementName(complexType.getName()));
- globalElement.setQName(elementName);
-
- xmlSchema.getItems().add(globalElement);
- xmlSchema.getElements().add(elementName, globalElement);
+ globalElement.setTypeDefinition
+ (typeTable.getXSDTypeDef(schemaElementName.getNamespaceURI(),
+ schemaElementName.getLocalPart()));
+ xmlSchema.getContents().add(globalElement);
+ xmlSchema.getElementDeclarations().add(globalElement);
}
- private Map getAnnoMapForElement(String elementKey)
- {
- if ( sdoAnnoMap.get(elementKey) == null )
- {
- sdoAnnoMap.put(elementKey, new Hashtable());
- }
- return (Map)sdoAnnoMap.get(elementKey);
- }
-
- private void addAliasNamesAnnotation(String targetNamespace,
- List aliasNames,
- String schemeElement,
- String schemeElementNameAttr)
+ private void addAliasNamesAnnotation(XSDSchemaContent typeDef,
+ List aliasNames)
{
if ( !aliasNames.isEmpty() )
{
@@ -677,139 +744,20 @@
Iterator iterator = aliasNames.iterator();
while ( iterator.hasNext() )
{
- sb.append(iterator.next());
+ sb.append(iterator.next());
}
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(ALIAS_NAMES, sb.toString());
+ typeDef.getElement().setAttribute(ALIAS_NAMES, sb.toString());
}
}
- private void addAbstractTypeAnnotation(String targetNamespace,
- boolean isAbstract,
- String schemeElement,
- String schemeElementNameAttr)
- {
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(ABSTRACT_TYPE, new Boolean(isAbstract).toString());
- }
-
-
- private void addPackageAnnotation(Type dataType)
+ private void addPackageAnnotation(XSDSchema xmlSchema, Type dataType)
{
if ( dataType.getInstanceClass() != null )
{
- getAnnoMapForElement(makeAnnotationMapKey(dataType.getURI(),
- SCHEMA,
- "")).put(JAVA_PACKAGE,
- dataType.getInstanceClass().getPackage().getName());
- }
- }
-
-
- private void addReadOnlyAnnotation(String targetNamespace,
- boolean isReadOnly,
- String schemeElement,
- String schemeElementNameAttr)
- {
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(READ_ONLY, new Boolean(isReadOnly).toString());
- }
-
-
-
- private void addPropertyTypeAnnotation(String targetNamespace,
- String prefix,
- String propertyTypeName,
- String schemeElement,
- String schemeElementNameAttr)
- {
- String value = prefix + COLON + propertyTypeName;
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(PROPERTY_TYPE, value);
- }
-
-
-
- private void addOppositePropertyAnnotation(String targetNamespace,
- String oppositePropName,
- String schemeElement,
- String schemeElementNameAttr)
- {
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(OPPOSITE_PROPERTY, oppositePropName);
- }
-
-
-
- private void addInstanceClassAnnotation(String targetNamespace,
- String className,
- String schemeElement,
- String schemeElementNameAttr)
- {
- getAnnoMapForElement(makeAnnotationMapKey(targetNamespace,
- schemeElement,
- schemeElementNameAttr)).
- put(INSTANCE_CLASS, className);
- }
-
- private DataObject createDataObject(Class sdoType) throws Exception
- {
- Constructor constructor = sdoType.getDeclaredConstructor(new Class[0]);
- constructor.setAccessible(true);
- Object instance = constructor.newInstance(new Object[0]);
- return (DataObject)instance;
- }
-
- public void clipProperties(Type dataType)
- {
- Property aProperty = null;
- //clip properties with name 'mixed' when parent data type is sequenced
- /*if ( dataType.isSequenced() &&
- (aProperty = getPropertyByName(dataType.getDeclaredProperties(), MIXED)) != null )
- {
- dataType.getDeclaredProperties().remove(aProperty);
- }*/
- }
-
- private Property getPropertyByName(List propertiesList, String propertyName)
- {
- Iterator iterator = propertiesList.iterator();
- Property aProperty = null;
- while ( iterator.hasNext())
- {
- aProperty = (Property)iterator.next();
- if ( aProperty.getName().equals(propertyName) )
- {
- return aProperty;
- }
- }
- return null;
- }
-
- private Collection getPropertyStartsWithName(List propertiesList, String propertyName)
- {
- Iterator iterator = propertiesList.iterator();
- Property aProperty = null;
- Vector matchingProperties = new Vector();
- while ( iterator.hasNext())
- {
- aProperty = (Property)iterator.next();
- if ( aProperty.getName().startsWith(propertyName) )
- {
- matchingProperties.addElement(aProperty);
- }
+ xmlSchema.updateElement();
+ xmlSchema.getElement().setAttribute(JAVA_PACKAGE,
+ dataType.getInstanceClass().getPackage().getName());
}
- return matchingProperties;
}
private String generatePrefix()
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/TypeTable.java Wed Aug 2 10:54:09 2006
@@ -8,7 +8,10 @@
import javax.xml.namespace.QName;
-import org.apache.axiom.om.OMElement;
+//import org.apache.axiom.om.OMElement;
+import org.eclipse.xsd.XSDFactory;
+import org.eclipse.xsd.XSDTypeDefinition;
+import org.w3c.dom.Element;
@@ -21,6 +24,7 @@
private Hashtable simpleXSDTypes;
private Hashtable complexXSDTypes;
+ private Hashtable xsdTypeDefs;
public static String asQualifiedName(String uri, String typeName)
{
@@ -32,6 +36,7 @@
{
simpleXSDTypes = new Hashtable();
complexXSDTypes = new Hashtable();
+ xsdTypeDefs = new Hashtable();
populateSimpleXSDTypes();
populateStdSDOTypes();
}
@@ -136,7 +141,7 @@
new QName(XML_SCHEMA_URI, "decimal", XS_URI_PREFIX));
// Any types
- simpleXSDTypes.put(OMElement.class.getName(),
+ simpleXSDTypes.put(Element.class.getName(),
new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
simpleXSDTypes.put(ArrayList.class.getName(),
new QName(XML_SCHEMA_URI, "anyType", XS_URI_PREFIX));
@@ -196,5 +201,35 @@
return getComplexSchemaTypeName(namespaceURI, typeName);
}
}
+
+ public void addXSDTypeDef(String namespaceURI, String typeName, XSDTypeDefinition aTypeDef)
+ {
+ if ( namespaceURI != null && typeName != null && aTypeDef != null )
+ {
+ xsdTypeDefs.put(asQualifiedName(namespaceURI, typeName), aTypeDef);
+ }
+ }
+
+ public XSDTypeDefinition getXSDTypeDef(String namespaceURI, String typeName)
+ {
+ XSDTypeDefinition typeDef = null;
+ if ( namespaceURI != null && typeName != null )
+ {
+ if ( XML_SCHEMA_URI.equals(namespaceURI) )
+ {
+ if ( ( typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName)) ) == null )
+ {
+ typeDef = XSDFactory.eINSTANCE.createXSDSimpleTypeDefinition();
+ typeDef.setName(typeName);
+ typeDef.setTargetNamespace(namespaceURI);
+ addXSDTypeDef(namespaceURI, typeName, typeDef);
+ }
+ }
+ else
+ {
+ typeDef = (XSDTypeDefinition)xsdTypeDefs.get(asQualifiedName(namespaceURI, typeName));
+ }
+ }
+ return typeDef;
+ }
}
-
Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/helper/XSDHelperImpl.java Wed Aug 2 10:54:09 2006
@@ -20,6 +20,7 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Reader;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
@@ -28,10 +29,14 @@
import java.util.List;
import java.util.Map;
-import org.apache.axiom.om.OMElement;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
import org.apache.tuscany.sdo.impl.DynamicDataObjectImpl;
import org.apache.tuscany.sdo.util.DataObjectUtil;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
@@ -47,7 +52,6 @@
import org.eclipse.xsd.util.XSDResourceImpl;
import org.xml.sax.InputSource;
-
import commonj.sdo.Property;
import commonj.sdo.Type;
import commonj.sdo.helper.TypeHelper;
@@ -219,14 +223,10 @@
Hashtable schemaMap = new Hashtable();
Hashtable nsPrefixMap = new Hashtable();
TypeTable typeTable = new TypeTable();
- Hashtable sdoAnnotationsMap = new Hashtable();
-
- SchemaBuilder schemaBuilder = new SchemaBuilder(new XmlSchemaCollection(),
- schemaMap,
+ SchemaBuilder schemaBuilder = new SchemaBuilder( schemaMap,
nsPrefixMap,
typeTable,
- sdoAnnotationsMap,
namespaceToSchemaLocation);
Iterator iterator = types.iterator();
@@ -239,25 +239,37 @@
dataType = (Type)iterator.next();
schemaBuilder.buildSchema(dataType);
}
-
- //add sdo annotations to the generated schema elements
- SDOAnnotationsDecorator annoDecorator = new SDOAnnotationsDecorator();
- OMElement allSchemas = annoDecorator.decorateWithAnnotations(schemaMap, sdoAnnotationsMap);
- //print the schemas into a StringBuffer
- StringBuffer sb = new StringBuffer();
- iterator = allSchemas.getChildElements();
+
+ XSDSchema xmlSchema = null;
+ iterator = schemaMap.values().iterator();
+ StringWriter writer = new StringWriter();
+
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Transformer transformer = transformerFactory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+
while ( iterator.hasNext() )
{
- sb.append(iterator.next().toString());
+ xmlSchema = (XSDSchema)iterator.next();
+
+ if(xmlSchema.getElement() == null)
+ {
+ xmlSchema.updateElement();
+ }
+
+ transformer.transform(new DOMSource(xmlSchema.getElement().getOwnerDocument()),
+ new StreamResult(writer));
}
- return sb.toString();
-
+ writer.close();
+ return writer.getBuffer().toString();
}
catch ( Exception e )
{
//System.out.println("Unable to generate schema due to ..." + e);
//e.printStackTrace();
- throw new IllegalArgumentException(e);
+ throw new IllegalArgumentException(e.getMessage());
}
}
else
Modified: incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java?rev=428070&r1=428069&r2=428070&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java (original)
+++ incubator/tuscany/java/sdo/impl/src/test/java/org/apache/tuscany/sdo/test/XSDHelperTestCase.java Wed Aug 2 10:54:09 2006
@@ -61,7 +61,7 @@
assertEquals(0, types2.size());
}
- public void testXSDGeneration_staicSDOType() throws IOException
+ public void testXSDGeneration_staticSDOType() throws IOException
{
//test for static sdo type. The test succeeds if the IllegalArgumentException is thrown
//by XSDHelper.generate method in which case the string xsd must be null;
@@ -107,6 +107,7 @@
Type dynamicQuoteType =
TypeHelper.INSTANCE.getType("http://www.example.com/dynamic", "DynamicQuote");
+
Vector types = new Vector();
types.add(dynamicQuoteType);
String xsd = null;
@@ -170,7 +171,7 @@
try
{
Hashtable schemaLocationMap = new Hashtable();
- schemaLocationMap.put("http://www.example.com/simples", "http://www.example.com/simple/xsd");
+ schemaLocationMap.put("http://www.example.com/simple", "http://www.example.com/simple/xsd");
xsd = xsdHelper.generate(types, schemaLocationMap);
//System.out.println(xsd);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org