Frank,

actually XSD2JavaGenerator does not work in the case of any association type 
that is navigable from both sides.
I have intentionally, just to test generator, made Customer-SoH association 
navigable from both sides and generated code again cannot be compiled.

Regarding your comments on bidirectional references and containments, I know I 
can get container using dynamic SDO API but I don't want to see in a code that 
implements business logic any code that is related to protocols or data 
implementation technologies. 
Packing data to SOAP envelop or sendig data over IIOP is job of stubs and 
scaletons and main stream priogrammer should not ever cast object to classes 
related to those techologies. Based on the same principales, business 
programmer should not be avere that object he/she is dealing with is actually 
instance of some Hybernate proxy or SDO DataObject and should not ever cast 
those objects to mentioned classes unless he/she develops some tools or similar 
generic software.
And I do not want to use any dynamic API if I don't have to, so I prefer to 
have typed Java API and SDO specification explicitally lists that support as 
one of the major requirements. So SDO should support static API defined by XSD 
schema.
I think Java business programmer should be familiar with UML class diagrams 
that define domain and should get only corresponding POJOs to deal with. Code 
dealing with data transport or object distribution or data persistance, where 
BTW one technology is "cool" today and next day another one, should be hidden 
in adapters, skeletons and stubs.

Next is complete XSD built automatically from attached UML.

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Attention: Generated code! Do not modify by hand!
    Generated by: XmlSchema.vsl in andromda-xmlschema-cartridge.
  -->
<xsd:schema
    targetNamespace="http://www.cisco.com/odns/soa";
    xmlns:xsd="http://www.w3.org/2001/XMLSchema";
    xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
    xmlns:impl="http://www.cisco.com/odns/soa";
    elementFormDefault="qualified">

    <xsd:import namespace="commonj.sdo/xml" schemaLocation="sdoXML.xsd"/>

    <xsd:complexType name="Address">
        <xsd:sequence>
            <xsd:element name="street" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="city" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="Customer">
        <xsd:sequence>
            <xsd:element name="orders" type="xsd:IDREF" 
sdoxml:propertyType="impl:SoH" 
                sdoxml:oppositeProperty="customer" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="name" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="created" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="lastUpdated" type="xsd:dateTime" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="modifiedBy" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="id" type="xsd:long" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="Part">
        <xsd:sequence>
            <xsd:element name="uom" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="aggState" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="id" type="xsd:long" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="Product">
     <xsd:complexContent>
      <xsd:extension base="impl:Part">
        <xsd:sequence>
            <xsd:element name="description" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="modifiedBy" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="lastUpdated" type="xsd:dateTime" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="created" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
        </xsd:sequence>
      </xsd:extension>
     </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="SoH">
        <xsd:sequence>
            <xsd:element name="customer" type="xsd:IDREF" 
sdoxml:propertyType="impl:Customer" 
                sdoxml:oppositeProperty="orders" minOccurs="1" maxOccurs="1" />
            <xsd:element name="lines" type="impl:SoL" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="number" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="receivedDate" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="modifiedBy" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="lastUpdated" type="xsd:dateTime" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="created" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="id" type="xsd:long" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="SoL">
        <xsd:sequence>
            <xsd:element name="product" type="xsd:IDREF" 
sdoxml:propertyType="impl:Product" 
                sdoxml:oppositeProperty="soLs" minOccurs="1" maxOccurs="1" />
            <xsd:element name="soLineSch" type="impl:SoLSch" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="quantity" type="xsd:double" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="requestedDate" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="modifiedBy" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="lastUpdated" type="xsd:dateTime" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="created" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="id" type="xsd:long" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:complexType name="SoLSch">
        <xsd:sequence>
            <xsd:element name="requestedDate" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="quantity" type="xsd:double" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="modifiedBy" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="lastUpdated" type="xsd:dateTime" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="created" type="xsd:date" minOccurs="1" 
maxOccurs="1"/>
            <xsd:element name="id" type="xsd:long" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="xmlId" type="xsd:ID"/>
    </xsd:complexType>

    <xsd:element name="DataGraphRootEl" type="impl:DataGraphRoot"/>
    <xsd:complexType name="DataGraphRoot">
        <xsd:sequence>
            <xsd:element name="customer" type="impl:Customer" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="product" type="impl:Product" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="part" type="impl:Part" minOccurs="0" 
maxOccurs="unbounded" />
            <xsd:element name="soH" type="impl:SoH" minOccurs="0" 
maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>



Miro




-----Original Message-----
From: Frank Budinsky [mailto:[EMAIL PROTECTED]
Sent: Mon 9/17/2007 7:49 AM
To: [email protected]
Subject: Re: XSD2JavaGenerator and non-containment references
 
Miro,

Both sides of a relationship defined with sdoXML:oppositeProperty need to 
be non-containment references. All containment references are implicitly 
bidirectional (the reverse is the elements container), so you wouldn't 
really want to use an IDREF element anyway - it's just duplicate 
information.

To get the SoH from an SoL, you can call:

SoH soh = (SoH)sol.getContainer();

You could manually add a getOrder() (convenience) method in the generated 
class like this:

SoH getOrder() { return (SoH)getContainer(): }

EMF has a way to generate this kind of method for you, but there's no 
support for this in SDO.

Frank.

"Miro Kandic \(mkandic\)" <[EMAIL PROTECTED]> wrote on 09/14/2007 08:40:40 
PM:

> I am having a problem with new XSD2JavaGenerator (M2 was OK) and it 
> generates code that cannot be compiled in case when container 
> element has non-containment reference to the container.
> Entire xsd file is attched.
> In this case I want to use static API and I want to get sales order 
> header (SoH) from its lines (SoL) using the same Java code (getter) 
> as in case when I use corresponding POJO's.
> It works fine if property is non-containment reference to no 
> container class (SoL references product or SoH references Customer).
> 
> I am a new in this community and I do not know if this is considered
> as a bug who and how should open it. Please, advise.
> 
>     <xsd:complexType name="SoH">
>         <xsd:sequence>
>             <xsd:element name="customer" type="xsd:IDREF" sdoxml:
> propertyType="impl:Customer" sdoxml:oppositeProperty="soHs" 
> minOccurs="1" maxOccurs="1" />
>             <xsd:element name="lines" type="impl:SoL" minOccurs="0" 
> maxOccurs="unbounded" />
>             <xsd:element name="number" type="xsd:string" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="receivedDate" type="xsd:date" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="modifiedBy" type="xsd:string" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="lastUpdated" type="xsd:dateTime" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="created" type="xsd:date" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="id" type="xsd:long" minOccurs="1" 
> maxOccurs="1"/>
>         </xsd:sequence>
>         <xsd:attribute name="xmlId" type="xsd:ID"/>
>     </xsd:complexType>
> 
>     <xsd:complexType name="SoL">
>         <xsd:sequence>
>             <xsd:element name="order" type="xsd:IDREF" sdoxml:
> propertyType="impl:SoH" sdoxml:oppositeProperty="lines" 
> minOccurs="1" maxOccurs="1" />
>             <xsd:element name="product" type="xsd:IDREF" sdoxml:
> propertyType="impl:Product" sdoxml:oppositeProperty="soLs" 
> minOccurs="1" maxOccurs="1" />
>             <xsd:element name="soLineSch" type="impl:SoLSch" 
> minOccurs="0" maxOccurs="unbounded" />
>             <xsd:element name="quantity" type="xsd:double" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="requestedDate" type="xsd:date" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="modifiedBy" type="xsd:string" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="lastUpdated" type="xsd:dateTime" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="created" type="xsd:date" 
> minOccurs="1" maxOccurs="1"/>
>             <xsd:element name="id" type="xsd:long" minOccurs="1" 
> maxOccurs="1"/>
>         </xsd:sequence>
>         <xsd:attribute name="xmlId" type="xsd:ID"/>
>     </xsd:complexType>
> 
> Regards,
> Miro
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to