I tried serializing a class containing a hash map with snakeYAML 1.13, and just got a rather strange stackoverflow:
The full code has some other things in the class that I removed for simplicity
code example:
import java.awt.Point;
import java.util.HashMap;
import org.yaml.snakeyaml.Yaml;
class TestClass
{
public static void main(final String args2[])
{
IZSkinFile f = new IZSkinFile();
HashMap<String,Point> ep = f.getElementPositions();
ep.put("another unimportant name",new java.awt.Point(10, 10));
System.out.println(new Yaml().dump(f));
}
}
class IZSkinFile
{
public IZSkinFile(String uprogram)
{
elementPositions = new HashMap<>();
}
public IZSkinFile(){
elementPositions = new HashMap<>();
}
private HashMap<String,Point> elementPositions;
public HashMap<String, Point> getElementPositions()
{
return elementPositions;
}
public void setElementPositions(HashMap<String, Point> elementPositions)
{
this.elementPositions = elementPositions;
}
}
and the result is the following Stackoverflow (only the upper and lower end are shown to save unnecessary lines:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:122)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415)
at java.lang.StringBuilder.append(StringBuilder.java:132)
at org.yaml.snakeyaml.nodes.Tag.<init>(Tag.java:87)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:74)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
...
...
...
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
at org.yaml.snakeyaml.representer.Representer.representJavaBeanProperty(Representer.java:125)
at org.yaml.snakeyaml.representer.Representer.representJavaBean(Representer.java:83)
at org.yaml.snakeyaml.representer.Representer$RepresentJavaBean.representData(Representer.java:49)
at org.yaml.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:106)
source
share