public Object read(TypeTreeNode node, InputStream is) {
Object result = null;
try {
int discriminator = is.read_long();
UnionAttributes attrs = (UnionAttributes)node.getAttributes();
String childName = attrs.getOptionsMapping().get(discriminator);
if (childName == null) {
// get default if option numbers field not found
childName = attrs.getDefaultOptionName();
}
result = node.getJavaClass().newInstance();
Field discField = result.getClass().getDeclaredField(attrs.getDiscriminatorName());
discField.setAccessible(true);
discField.set(result, discriminator);
for (int i = 0; i < node.getChildren().length; i++) {
if (node.getChildren()[i].getName().equals(childName)) {
Object unionValue = TypeHelpersProxy.read(node.getChildren()[i], is);