Stackoverflow when serializing hashmap in snakeyaml

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<>();    
    }//serialisierer....
    // private HashMap<String,String> elementDefinitions;//name>typ (Grafik/text/Schriftart)
    private HashMap<String,Point> elementPositions; //basisposition des elements
    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)
+4
source share
1 answer

Found a dumb problem ...
somehow java.awt.Pointmesses up, although it has only 2 properties. using an array int[]with 2 ints to store due to an error that drives me crazy.

+1
source

Source: https://habr.com/ru/post/1526216/


All Articles