Hi All,
I have encountered a problem when trying to create a binding that would accept
an XML like:
<Container>
<ItemA>
<ItemB>
<!-- possibly followed by more ItemA and/or ItemB elements-->
</Container>
, and result in a collection of objects of the same type, say "Item", that
would hold the original type ("ItemA" or "ItemB") information in its "type"
property. I thought I could achieve that with the following binding:
<binding>
<mapping class="Collection" name="Collection">
<collection item-type="Item" add-method="add" iter-method="iterator">
<structure name="ItemA" type="Item" usage="optional"
test-method="isTypeA">
<value name="type" style="attribute" usage="optional" default="A"
get-method="getType" set-method="setType" />
</structure>
<structure name="ItemB" type="Item" usage="optional"
test-method="isTypeB">
<value name="type" style="attribute" usage="optional" default="B"
get-method="getType" set-method="setType" />
</structure>
</collection>
</mapping>
</binding>
However this doesn't seem to work, resulting in org.jibx.runtime.JiBXException:
Property definition not allowed for collection items at tag "structure"(line 4,
col 78, in test.xml). Apparently the "property definition" refers to
"test-method" that is listed under "property" attribute group. I also tried
leaving just one "test-method" declaration in either of the two Item-type
structures contained within the collection (as is done in
http://jira.codehaus.org/browse/JIBX-142). As long as the first structure
declaration defined a "test-method", the error remained the same. When
test-method was removed from the first structure declaration, it resulted in a
different error: Collection component must specify a test-method to distinguish
from next component of compatible type for marshalling; on structure element at
(line 4, col 60, in test.xml)... So, did I understand these error messages
right, and the "test-method" definition is both required and disallowed for
collection items,
or am I doing something wrong there?
P.S: Not really related to the above problem, but how are optional elements
having a default value being treated when marshalling? Assuming the above
binding would work, would it result in item XML representation looking like
<ItemA type="A">, or just <ItemA>? Would it make a difference if Item.getType()
returned null instead of the actual type?
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
jibx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-users