users@jaxb.java.net

Re: jaxb inheritance question

From: Mr Levente Bokor <lbokor_at_yahoo.com>
Date: Wed, 17 Mar 2004 04:18:08 -0800 (PST)

Some extra information related to my question:

Our aim is to define a generic envelope that can
contain a wide range of
request or response objects as payload. To achieve
this we are using
inheritance: the definition of the envelope (called
'djiMessage') defines
that it contains a 'message' in it's body. At runtime
this will be an
object/element that inherits from 'message', for
instance
'opvoerenJustitiabeleRequest'. .

We can generate our JAXB classes just fine but when we
use them to
marshall an envelope instance that contains such a
'opvoerenJustitiabeleRequest' the resulting element
is 'message'. So
that's the most generic element, while we expect that
to be the most
specific element 'opvoerenJustitiabeleRequest'.

So our question is: what is going wrong and how can we
fix this.

When we marshal the classes generated based on the
following XSD:

<xs:element name="djiMessage" type="djiMessageType"/>
  <xs:complexType name="djiMessageType">
    <xs:sequence>
      <xs:element name="header" type="header"/>
      <xs:element name="body" type="body"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="error"/>
  <xs:complexType name="errors">
    <xs:sequence>
      <xs:element name="error" type="error"
maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="header">
    <xs:sequence>
      <xs:element name="serviceName"
type="xs:string"/>
      <xs:element name="messageType"
type="xs:string"/>
      <xs:element name="errors" type="errors"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="body">
    <xs:sequence>
      <xs:element name="message" type="message" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="message">
    <xs:sequence/>
  </xs:complexType>

  <xs:complexType name="opvoerenJustitiabeleRequest" >
    <xs:complexContent>
      <xs:extension base="message">
        <xs:sequence>
          <xs:element name="justitiabele"
type="justitiabele"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

  <xs:complexType name="justitiabele">
    <xs:sequence>
      <xs:element name="nummerDji" type="xs:int"/>
      <xs:element name="vipNummer" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>

we get the XML mentioned bellow:
<djiMessage>
  <header>
    <serviceName>justitiabeleService</serviceName>
    <messageType>msg_type</messageType>
    <errors>
      <error/>
    </errors>
  </header>
  <body>
    <message>
      <justitiabele>
        <nummerDji>24</nummerDji>
        <vipNummer>34</vipNummer>
      </justitiabele>
    </message>
  </body>
</djiMessage>

Regards,

Levente


__________________________________
Do you Yahoo!?
Yahoo! Mail - More reliable, more storage, less spam
http://mail.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_jaxb.dev.java.net
For additional commands, e-mail: users-help_at_jaxb.dev.java.net