I'm using yamlbeans to deserialize yaml files into Java objects. This works fine as long as I only have one class. The problem is when I want to nest a field, I am forced to specify the nested class in the yaml description.
Single class example:
Java:
public class MessageField {
public String name;
public String type;
public int length;
public String comment;
}
yaml:
name: field1
type: int
length: 4
comment: first field
---
name: field2
type: string
length: 16
comment: second field
---
Multiple classes (requires !com.mylib.VariableField in yaml file)
Java:
public class MessageField {
public String name;
public String type;
public int length;
public String comment;
public List<VariableField> variableFields;
}
public class VariableField extends MessageField{
public int id;
}
yaml:
name: field3
type: short
length: 2
comment:
variableFields:
- !com.mylib.VariableField
id: 1
name: nestedField 1
type: string
length: -1
comment:
---
The yaml documentation page describes how to deserialize a class by specifying the type when reading the class, which is what I do for my top level class:
YamlReader reader = new YamlReader(new FileReader("sample.yml"));
MessageField mf = reader.read(MessageField.class);
This correctly parses my fields for the top level class, but does not allow me to avoid the !com.mylib.VariableField identifier for my nested class. I'm trying to figure out if there is any way to change the Java code so that the yaml files are not required to know the class name.
Comments
Post a Comment