Hi All,

Tuscany SDO version: Tuscany SDO 1.0 beta1.

I'm trying to dynamically create and use types without the use of an XSD
file. What i want to do is something a little different to what is described
in the samples provided. I want to have elements within each nested type. i
also want to to be able to support lists (String lists, Interger lists etc).

My dynamically defined XSD should look like this (complete xsd is
attached...),

   <xsd:element name="dataType" type="DataType"/>
   <xsd:complexType name="DataType">
       <xsd:sequence>
           <xsd:element maxOccurs="unbounded" minOccurs="0" name="item"
type="ItemType"/>
           <xsd:element maxOccurs="unbounded" minOccurs="0" name="list"
type="ListItemType"/>
       </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="ItemType">
       <xsd:sequence>
           <xsd:element name="type" type="xsd:string"/>
           <xsd:element name="name" type="xsd:string"/>
           <xsd:element name="boolean" type="xsd:boolean"/>
       </xsd:sequence>
<xsd:complexType name="ListItemType">
       <xsd:sequence>
           <xsd:element name="listType" type= "xsd:string"/>
           <xsd:element name="listName" type= "xsd:string"/>
           <xsd:element name="booleanList" type= "BooleanListType"/>
       </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="BooleanListType">
       <xsd:sequence>
           <xsd:element maxOccurs="unbounded" minOccurs= "0" name=
"booleanValue" type="xsd:boolean"/ >
       </xsd:sequence>
   </xsd:complexType>

I added the many true option when creating the property for each data object
which resulted in type, name and boolean resulting in elements.
       // create data graph root
       DataGraph dataGraph = SDOUtil.createDataGraph();
       DataObject dynamic = dataGraph.createRootObject("commonj.sdo",
"Type");
       dynamic.set("uri", "http://www.dynamic.com/dynamic ");
       dynamic.set("name", "DataType");
       dynamic.set("dataType", false);

       // primitive type.. ints
       DataObject custNumProperty = dynamic.createDataObject ("property");
       custNumProperty.set("name", "custNum");
       custNumProperty.set("type", intType);
       custNumProperty.set("many", true);

However i am unable set values to the data object once i do this.I get the
following stack trace when i do this,
   DataObject createdDO = DataFactory.INSTANCE.create("
http://www.dynamic.com/dynamic";, "DataType");
   createdDO.setInt("custNum", 1000);

java.lang.ClassCastException: java.lang.Integer
   at org.eclipse.emf.ecore.util.EcoreEList.set(EcoreEList.java:448)
   at
org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$InternalSettingDelegateMany.dynamicSet(
EStructuralFeatureImpl.java:1647)
   at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eDynamicSet(
BasicEObjectImpl.java:709)
   at org.apache.tuscany.sdo.impl.DynamicDataObjectImpl.eDynamicSet(
DynamicDataObjectImpl.java :150)
   at org.apache.tuscany.sdo.impl.DataObjectImpl.eSet(DataObjectImpl.java
:1442)
   at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eSet(
BasicEObjectImpl.java:654)
   at org.apache.tuscany.sdo.impl.DataObjectImpl.set (DataObjectImpl.java
:143)
   at org.apache.tuscany.sdo.util.DataObjectUtil.setInt(DataObjectUtil.java
:532)
   at org.apache.tuscany.sdo.impl.DataObjectImpl.setInt(DataObjectImpl.java
:526)

(if i leave out the many true flag, then the xsd displays them as attributes
and i am able to set values to them)

My code is attached for your review.

I would appreciate your help in this regard. The reason i want to
dynamically define the type is because my client requires high performant
code. The time taken to execute the dynamic xsd is quite less compared to
the time taken to read the xsd. Almost a whole second.

Thanks and regards
Roshan

The samples provide an example where the dynamically defined types result in
attributes and not elements.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to