2

PodamFactory を使用して正しく入力する方法を教えてください。StackOverflowErrorを呼び出すと、 for productList(source class List)を取得しますpodamFactory.manufacturePojo(Product)

製品 (A) ソース:

public class Product {

    private String productName;

    private String productDescription;

    private Double price;

    private Boolean availability;

    private List<Product> productList;

    // getters & setters

}

例外:

Caused by: java.lang.StackOverflowError
    sun.reflect.generics.parser.SignatureParser.parseSimpleClassTypeSignature(SignatureParser.java:253)
    sun.reflect.generics.parser.SignatureParser.parseClassTypeSignatureSuffix(SignatureParser.java:270)
    sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(SignatureParser.java:244)
    sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:228)
    sun.reflect.generics.parser.SignatureParser.parseTypeArgument(SignatureParser.java:319)
    sun.reflect.generics.parser.SignatureParser.parseTypeArguments(SignatureParser.java:284)
    sun.reflect.generics.parser.SignatureParser.parseSimpleClassTypeSignature(SignatureParser.java:260)
    sun.reflect.generics.parser.SignatureParser.parseClassTypeSignatureSuffix(SignatureParser.java:270)
    sun.reflect.generics.parser.SignatureParser.parseClassTypeSignature(SignatureParser.java:244)
    sun.reflect.generics.parser.SignatureParser.parseFieldTypeSignature(SignatureParser.java:228)
    sun.reflect.generics.parser.SignatureParser.parseTypeSignature(SignatureParser.java:359)
    sun.reflect.generics.parser.SignatureParser.parseZeroOrMoreTypeSignatures(SignatureParser.java:469)
    sun.reflect.generics.parser.SignatureParser.parseFormalParameters(SignatureParser.java:446)
    sun.reflect.generics.parser.SignatureParser.parseMethodTypeSignature(SignatureParser.java:436)
    sun.reflect.generics.parser.SignatureParser.parseMethodSig(SignatureParser.java:141)
    sun.reflect.generics.repository.ConstructorRepository.parse(ConstructorRepository.java:37)
    sun.reflect.generics.repository.ConstructorRepository.parse(ConstructorRepository.java:25)
    sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:56)
    sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:30)
    sun.reflect.generics.repository.ConstructorRepository.<init>(ConstructorRepository.java:33)
    sun.reflect.generics.repository.MethodRepository.<init>(MethodRepository.java:28)
    sun.reflect.generics.repository.MethodRepository.make(MethodRepository.java:41)
    java.lang.reflect.Method.getGenericInfo(Method.java:94)
    java.lang.reflect.Method.getGenericParameterTypes(Method.java:282)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojoInternal(PodamFactoryImpl.java:1464)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojo(PodamFactoryImpl.java:109)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1681)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1568)
    uk.co.jemos.podam.api.PodamFactoryImpl.fillCollection(PodamFactoryImpl.java:2078)
    uk.co.jemos.podam.api.PodamFactoryImpl.resolveCollectionValueWhenCollectionIsPojoAttribute(PodamFactoryImpl.java:1973)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1646)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojoInternal(PodamFactoryImpl.java:1485)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojo(PodamFactoryImpl.java:109)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1681)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1568)
    uk.co.jemos.podam.api.PodamFactoryImpl.fillCollection(PodamFactoryImpl.java:2078)
    uk.co.jemos.podam.api.PodamFactoryImpl.resolveCollectionValueWhenCollectionIsPojoAttribute(PodamFactoryImpl.java:1973)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1646)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojoInternal(PodamFactoryImpl.java:1485)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufacturePojo(PodamFactoryImpl.java:109)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1681)
    uk.co.jemos.podam.api.PodamFactoryImpl.manufactureAttributeValue(PodamFactoryImpl.java:1568)
    uk.co.jemos.podam.api.PodamFactoryImpl.fillCollection(PodamFactoryImpl.java:2078)
4

3 に答える 3

1

問題はおそらくここにあります:

private List<Product> productList;

ここで行われるプロセスはすべて再帰的に行われるようです。その再帰性を破る必要があります。

ただし、使用するAPIは再帰性をサポートしているため、グーグルで調べた後、奇妙に見えますが、リンクのケースはインスタンスのコレクションではなく、インスタンスの場合です。

より新しいバージョンを試しますか?

EDIT注釈があり@PodamCollectionます。多分それはあなたを助けることができます

于 2013-06-17T10:18:59.273 に答える
0

バージョン 3.1.3 以降、PODAM は POJO 依存関係のループを検出し、再帰をカットすることで、この状況を適切に処理します。

于 2014-01-22T19:00:49.970 に答える