0

私は現在、ジェネリックを使用し、少し複雑なモデルに取り組んでいます。私は同様の質問が答えられたことを理解していますが、それらのどれも私のものに明確に答えていません。

これが私のモデルです:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
              { 
                  @Type(value = Cls2.class, name = "Cls2") 
              })
abstract class Cls1<T> implements Serializable
{
    private T myObj;

    public T getMyObj()
    {
        return myObj;
    }

    public Cls1(T obj)
    {
        myObj = obj;
    }
    @JsonTypeName("Cls2")
    public static class Cls2<E extends Int1> extends Cls1<E> implements Serializable
    {
        public Cls2()
        {
            super(null);
        }
    }
}

@JsonTypeName("ChildContainer")
class ChildContainer extends ParentContainer<OtherBean>
{

}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
              { 
                  @Type(value = ChildContainer.class, name = "ChildContainer") 
              })
class ParentContainer<T extends RootBean> implements Int1
{

}

@JsonTypeName("OtherBean")
class OtherBean extends RootBean
{

}

@JsonTypeName("RootBean")
class RootBean implements Int1
{

}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.WRAPPER_OBJECT, property = "type")
@JsonSubTypes(
              { 
                  @Type(value = RootBean.class, name = "RootBean"),
                  @Type(value = OtherBean.class, name = "OtherBean")
              })
interface Int1 extends Serializable
{

}

私の目標は、次のようにjacksonを使用してシリアル化および逆シリアル化することです。

public static void main(String[] args) throws Exception
    {

        Cls2<ChildContainer> req = new Cls2<ChildContainer>();

        File file = new File("==some-file-path==");

        ObjectMapper mapper = new ObjectMapper();

        mapper.writeValue(file, req);

        //read it back using mapper.readValue(file, clazz) --Not sure about this
    }

シリアル化中に次のjava.lang.StackOverflowErrorが発生します。

Exception in thread "main" java.lang.StackOverflowError
    at java.lang.Class.getDeclaringClass(Native Method)
    at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)
    at org.codehaus.jackson.map.type.TypeBindings._resolve(TypeBindings.java:221)
    at org.codehaus.jackson.map.type.TypeBindings.findType(TypeBindings.java:138)
    at org.codehaus.jackson.map.type.TypeFactory._fromVariable(TypeFactory.java:951)
    at org.codehaus.jackson.map.type.TypeFactory._constructType(TypeFactory.java:493)
    at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:423)
    at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:395)
    at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:299)
    at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)
    at org.codehaus.jackson.map.type.TypeBindings._resolve(TypeBindings.java:221)
    at org.codehaus.jackson.map.type.TypeBindings.findType(TypeBindings.java:138)
    at org.codehaus.jackson.map.type.TypeFactory._fromVariable(TypeFactory.java:951)
    at org.codehaus.jackson.map.type.TypeFactory._constructType(TypeFactory.java:493)
    at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:423)
    at org.codehaus.jackson.map.type.TypeFactory.findTypeParameters(TypeFactory.java:395)
    at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:299)
    at org.codehaus.jackson.map.type.TypeBindings._resolveBindings(TypeBindings.java:290)

どんな助けでも深く感謝します。

4

1 に答える 1

1

スタックトレースは、それ自体がネストされているクラスを拡張する型解決の無限再帰を示唆してCls2います。これは、Jackson のまれなケースのバグのようです (報告してください!)。Cls2当面は、スーパークラスにネストするのではなく、スタンドアロン クラスに抽出することで、この問題を解決できます。

于 2012-08-07T16:56:00.300 に答える