Roshan,

First, in your code snippet, I don't see intType defined anywhere prior to its use in the line below. I suspect this line was inadvertently left out of your snippet.

custNumProperty.set("type", intType);

Second, I believe the following line indicates the custNum property value will be a list of integers rather than a single integer.

custNumProperty.set("many", true);

As a result, I think createdDO.setInt("custNum", 1000); should really be createdDO.setList("custNum", Arrays.asList(new Integer[] {1000}));

Best regards,

- Ron

Roshan Paiva wrote:
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 <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