Hi,
I've generated data classes based on a predefined xsd. One of the types
defines a choice of various base types. So far so good. But If the data
type is a atomar java data type (int, long, byte etc) and the value is
'0', the xml element created while serialization remains empty.
<value />
instead of
<value><integer>0</integer><value>
The generator created a choice class wrapping the types like:
public class TYPEValue {
private Choice choice;
public get/setChoice(...);
public static class Choice {
private int choiceSelect = -1;
private static final int LONG_CHOICE = 0;
private static final int INTEGER_CHOICE = 1;
...
private static final int UTF8_STRING_CHOICE = 12;
private long _long;
private int _integer;
...
private String UTF8String;
public boolean ifInteger() {
return choiceSelect == INTEGER_CHOICE;
}
public void setInteger(int _integer) {
setChoiceSelect(INTEGER_CHOICE);
this._integer = _integer;
}
}
}
Unfortunately will be neither the choice nor the value serialized, if
the atomar java types (int, long, byte, short etc) '0'.
TYPEValue type = new TYPEValue();
TYPEValue.Choice choice = new TYPEValue.Choice();
choice.setInteger(0);
type.setChoice(choice);
will be serialized as
<parent>
...
<value />
</parent>
where choice.setInteger(1);will be serialized as
<parent>
...
<value>
<integer>1</integer>
</value>
</parent>
With the consequence, that the deserialization loses the choice
information too. That means the choice member of the TYPEValue object
stays null - what makes sense from the xml information set.
I tried to override the empty element by using own
serializer/deserializer, without success - the xml element remains
without choice and int value. So I decompiled the - by the binding
compiler created class TYPEValue$Choice. Surprise:
public static void JiBX_binding_marshal_1_0(ext arg1, MarshallingContext
arg2) throws JiBXException {
arg2.pushObject(arg1);
arg2;
...
if(!arg1.ifInteger()) goto _L4; else goto _L3
_L3:
3;
"integer";
int i = arg1.getInteger();
i;
_*if(i != 0) goto _L6; else goto _L5*_
_L5:
JVM INSTR pop ;
JVM INSTR pop ;
JVM INSTR pop ;
goto _L4
_L6:
JiBXConverter.writeInt(); // my customized serializer
element();
_L4:
....
The choice value will be inspected and skipped explicit for atomar java
data types. May I override this behaviour? Is this a bug?
Thanks in advance
Sven
------------------------------------------------------------------------------
_______________________________________________
jibx-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-users