Hi,
I have used JiBX for simple XML mappings, but now I get to a more complex
mapping involving a collection of subclasses of one super class. I need to
map these subclasses to the same element name. With the mapping below I
can create more or less the correct structure, but the item tag names will
be item1, item2 and item3 instead of item for all of the subclasses.
When I use the same name for all of them I get the compile error
"Duplicate mapping name not allowed for unmarshalling".
Is there a way to have JiBX output the XML with the subclasses mapped to
the same tag name?
NB: there is no need to go from XML back to objects.
Regards,
Frank van Eerden
These are the classes:
class BaseType {
long id;
}
class StringType extends BaseType {
String key;
String value;
}
class DictType extends BaseType {
Set<BaseType> items;
}
class ListType extends BaseType {
String key;
Set<BaseType> items;
}
class Message {
String name;
Set<BaseType> fields;
}
The XML the JiBX mapping should be able to generate:
<message>
<name>value</name>
<fields>
<item><key>name1</key><valueString>value1</valueString></item>
<item><key>name2</key><valueString>value2</valueString></item>
<item>
<key>name3</key>
<valueList>
<item>
<valueDict>
<item><key>name3.1</key><valueString>value3.1</valueString></item>
<item><key>name3.2</key><valueString>value3.2</valueString></item>
</valueDict>
</item>
</valueList>
</item>
</fields>
</message>
The binding file used:
<binding>
<mapping name="message" class="package.Message">
<value name="name" field="name" />
<collection name="fields" field="params"
type="java.util.HashSet">
<structure map-as="package.BaseType" />
</collection>
</mapping>
<mapping name="base" class="package.BaseType" abstract="true"/>
<mapping name="item1" class="package.TypeString"
extends="package.BaseType">
<value name="key" field="key" />
<value name="valueString" field="value" />
</mapping>
<mapping name="item2" class="package.TypeList"
extends="package.BaseType">
<value name="key" field="key" />
<collection name="valueList" field="items"
type="java.util.HashSet">
<structure map-as="package.BaseType" />
</collection>
</mapping>
<mapping name="item3" class="package.TypeDict"
extends="package.BaseType">
<collection name="valueDict" field="items"
type="java.util.HashSet">
<structure map-as="package.BaseType" />
</collection>
</mapping>
</binding>
The End
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
jibx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-users