Hi Steven,
I don't see anything obviously wrong with what you're doing. Here's a
sample from the JiBX build test cases:
<mapping name="myelement" class="simple.MyClass3">
<structure ordered="false" choice="true">
<value name="a" field="a" usage="optional"/>
<value name="b" field="b" usage="optional"/>
<value name="c" field="c" usage="optional"/>
<value name="d" field="d" usage="optional"/>
</structure>
<value name="e" field="e" usage="optional" format="char.string"/>
Here's a corresponding XML:
<myelement>
<b>The Answer</b>
<dimension width="4" height="6"/>
...
It may be that there's some strange error coming in from the nesting
inside an abstract mapping, since that's the only thing that seems to be
different. Can you create a Jira and attach a test project to
demonstrate the problem?
- Dennis
Dennis M. Sosnoski
SOA and Web Services in Java
Training and Consulting
http://www.sosnoski.com - http://www.sosnoski.co.nz
Seattle, WA +1-425-939-0576 - Wellington, NZ +64-4-298-6117
Steven E. Harris wrote:
> I'm struggling trying to figure out the right way to write a binding
> for an xsd:choice structure. Consider the following schema fragment:
>
> <xs:simpleType name="Tmac-48">
> <xs:restriction base="xs:string">
> <xs:pattern value="[\p{Nd}A-F]{2}(-[\p{Nd}A-F]{2}){5}"/>
> </xs:restriction>
> </xs:simpleType>
>
> <xs:simpleType name="Teui-48">
> <xs:restriction base="Tmac-48"/>
> </xs:simpleType>
>
> <xs:simpleType name="Teui-64">
> <xs:restriction base="xs:string">
> <xs:pattern value="[\p{Nd}A-F]{2}(-[\p{Nd}A-F]{2}){7}"/>
> </xs:restriction>
> </xs:simpleType>
>
> <xs:simpleType name="Tfoo">
> <xs:restriction base="xs:normalizedString"/>
> </xs:simpleType>
>
> <xs:group name="Gdevice-id">
> <xs:choice>
> <xs:element name="mac-48" type="Tmac-48"/>
> <xs:element name="eui-48" type="Teui-48"/>
> <xs:element name="eui-64" type="Teui-64"/>
> </xs:choice>
> </xs:group>
>
> <xs:complexType name="Tmachine">
> <xs:sequence>
> <xs:group ref="Gdevice-id"/>
> <xs:element name="foo" type="Tfoo"/>
> </xs:sequence>
> </xs:complexType>
>
>
> That is, there's a complex type "Tmachine" which consists of one of a
> "mac-48", "eui-48", or "eui-64" element, and one "foo" element, like
> so, materialized in an element called "machine":
>
> <machine>
> <mac-48>11-22-33-44-55-66</mac-48>
> <foo>bar</foo>
> </machine>
>
> Alternately, one should be able to write:
>
> <machine>
> <!-- Note the different kind of device id: -->
> <eui-48>11-22-33-44-55-66</eui-48>
> <foo>bar</foo>
> </machine>
>
> My JiBX binding for this "Tmachine" type looks like this:
>
> <mapping class="Machine" abstract="true">
> <structure choice="true" ordered="false">
> <value name="mac-48" field="mac48"/>
> <value name="eui-48" field="eui48"/>
> <value name="eui-64" field="eui64"/>
> </structure>
> <value name="foo" field="foo"/>
> </mapping>
>
> It's referenced elsewhere in the binding like this:
>
> <structure name="machine" field="machine"/>
>
> where the field "machine" is of type "Machine" in the containing
> class.
>
> When I attempt to unmarshall the element <machine> above, JiBX throws
> an exception reporting:
>
> org.jibx.runtime.JiBXException:
> Missing required element "{...}eui-48"(line 4, col 45)
>
> That is, it sees the "mac-48" element and accepts that, but then
> demands an "eui-48" element to follow immediately, which seems as
> though it's mistakenly treating the xsd:choice as a sequence.
>
> Actually, if I put a "eui-48" element first followed by a "mac-48"
> element, JiBX still demands a "mac-48" element. If I put a "mac-48"
> element first followed by an "eui-48" element, JiBX still demands an
> "eui-48" element. There's no way to satisfy it, even by violating my
> own schema.
>
> When I run the JiBX compiler, I see the following output (namespaces
> elided):
>
> component property machine (Machine)
> object binding for Machine create class Machine
> structure ordered
> mapping reference to Machine using property "this" (Machine)
> base mapping wrapper
> object binding for Machine ("this" reference) create class Machine
> structure ordered
> structure choice
> element {...}:mac-48 from property mac48 (java.lang.String)
> element {...}:eui-48 from property eui48 (java.lang.String)
> element {...}:eui-64 from property eui64 (java.lang.String)
> element {...}:foo from property foo (java.lang.String)
>
> The output shows acknowledgment of the choice structure.
>
> Is there an obvious error in my binding that's causing JiBX to require
> all the would-be choice alternates?
>
>
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
jibx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-users