[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] [MOXy] mapping inheritance of schema types
|
Uh, nevermind, it does work. The key is to make sure every element in the
inheritance hierarchy is set up correctly to refer all the way back up to
Root. I checked this several times, but there are several "leaf" types and
I missed one. :P Then use the "xml schema 'type' attribute" in Root, and
make sure the indicator dictionary has an entry for each type in the
hierarchy. Then this works fine. :)
Thanks,
Polly
amphoras wrote:
>
> Hi,
>
> My schema defines the following inheritance:
>
> <xsd:complexType name="RootType" abstract="true">
> <xsd:sequence>
> <xsd:element ref="field1" minOccurs="0"/>
> </xsd:sequence>
> </xsd:complexType>
>
> <xsd:complexType name="BranchType" abstract="true">
> <xsd:complexContent>
> <xsd:extension base="RootType">
> <xsd:sequence>
> <xsd:element ref="field2" maxOccurs="unbounded"/>
> </xsd:sequence>
> </xsd:extension>
> </xsd:complexContent>
> </xsd:complexType>
>
> <xsd:complexType name="LeafType">
> <xsd:complexContent>
> <xsd:extension base="BranchType">
> <xsd:element ref="field3" maxOccurs="unbounded"/>
> </xsd:extension>
> </xsd:complexContent>
> </xsd:complexType>
>
> The Java classes also mirror this inheritance tree:
>
> public class Root {
> private String field1;
> }
>
> public class Branch extends Root {
> private String field2;
> }
>
> public class Leaf extends Branch {
> private String field3;
> }
>
> Actually, Root and Branch ought to be abstract classes, but EclipseLink
> threw instantiation exceptions complaining about missing no-arg
> constructor until I took out the "abstract".
>
> I expect to parse XML that looks like this into the Leaf object:
>
> <Leaf>
> <field1>...</field1>
> <field2>...</field2>
> <field3>...</field3>
> </Leaf>
>
> I don't want to redundantly map the fields from Branch and Root in Leaf,
> so I am trying to map each of those classes to its corresponding type in
> the schema. In the Workbench, I have these settings:
>
> 1. Leaf has a mapping for field3, the class is marked as a child
> descriptor, and its parent is Branch.
> 2. Branch has a mapping for field2, the class is marked as a child
> descriptor, and its parent is Root.
> 3. Root has a mapping for field1, the class is marked as a parent, and
> then... I'm stuck.
>
> The problem is:
> * I cannot use the Class Extraction Method, because it looks like this
> hook is never called for XML projects.
>
> * I cannot use the Class Indicator Field's "xml schema type attribute",
> because I assume this means that I need an an attribute like
> "xsi:type='Leaf'", and my schema does not allow this attribute.
>
> * I cannot use the Class Indicator Field's "specify field" setting because
> there's no element inside the <Leaf></Leaf> tags that will tell me what
> class to use.
>
> So I am perplexed. How come EclipseLink can't tell that it should use the
> Leaf class if the xml element name is "Leaf"? I have already set the
> "Schema Context" to "Leaf". Why does EclipseLink need something else to
> tell it what type to use?
>
> Is there a better way to specify inheritance in XML mappings without
> having to use the Map Inherited Attributes -> To Root Minus One option?
> That would force me to remap the same attributes over and over again and
> be a pain if the root definition ever changes.
>
> Thanks for your help,
> Polly
>
--
View this message in context: http://www.nabble.com/-MOXy--mapping-inheritance-of-schema-types-tp18691564p18692390.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.