I recently hit a problem using JAXB to parse a list of items in XML that contains both the actual items and references to items.
<examplelist>
<item>A</item>
<item>B</item>
<item-ref uri="itemC.xml"/>
<item-ref uri="itemD.xml"/>
<item>E</item>
</examplelist>
I had implemented an adapter to transform an ItemRef instance to an Item, but the following code did not work as I had expected.
@XmlElements({
@XmlElement(name = "item", type = Item.class),
@XmlElement(name = "item-ref", type = ItemRef.class)
})
private List<ability> items = new LinkedList<item>();
Instead of applying the adapter to the item-ref elements, it applied the adapter to all elements mapped to the list (it took a while to work this one out).
The fix was to create a new adapter class that mapped Item to Item and use this as the adapter for item-ref elements. If this adapter was passed an ItemRef, it adapted it to an Item, otherwise it returned it unmodified.
No comments:
Post a Comment