Проблемы при загрузке initial-data.yml в play 2.0

Я пытаюсь портировать на YABE в play1.2.4, чтобы играть в 2.0.4 Java. Для этого я создал файл initial-data.yml и попытался загрузить его с помощью Global.java.

#Users
users:
    - !!models.User
        email:      [email protected]
        password:   secret
        fullname:   Bob
        isAdmin:    true
#Posts

posts:

    - !!models.Post
        id:         1
        title:      About the model layer
        postedAt:   2009-06-14
        author:     
            - !!models.User
                email: [email protected]
        content:    >
                    The model has a central position in a Play! application. Cut....   

Мой Global.java ниже

public void onStart(Application app) {
        InitialData.insert(app);
    }

    static class InitialData {
        public static void insert(Application app) {
            if(Ebean.find(User.class).findRowCount() == 0) {
                Map<String, List<Object>> all = (Map<String, List<Object>>)Yaml.load("initial-data.yml");
                Ebean.save(all.get("users"));
                Ebean.save(all.get("posts"));
                Ebean.save(all.get("comments"));
            }
        }
    }

При загрузке я получаю следующие ошибки

ConstructorException: ноль; Не удается создать объект Java для tag:yaml.org,2002:models.Post; исключение=Невозможно создать свойство=автор для JavaBean=models.Post@1; Не найден подходящий конструктор с 3 аргументами для моделей классов.Пользователь

org.yaml.snakeyaml.constructor.ConstructorException: null; Can't construct a java object for tag:yaml.org,2002:models.Post; exception=Cannot create property=author for JavaBean=models.Post@1; No suitable constructor with 3 arguments found for class models.User

     org.yaml.snakeyaml.constructor.Constructor$ConstructYamlObject.construct(Constructor.java:333)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructSequenceStep2(BaseConstructor.java:277)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructSequence(BaseConstructor.java:248)

     org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlSeq.construct(SafeConstructor.java:440)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping2ndStep(BaseConstructor.java:326)

     org.yaml.snakeyaml.constructor.SafeConstructor.constructMapping2ndStep(SafeConstructor.java:143)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructMapping(BaseConstructor.java:307)

     org.yaml.snakeyaml.constructor.SafeConstructor$ConstructYamlMap.construct(SafeConstructor.java:459)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructObject(BaseConstructor.java:183)

     org.yaml.snakeyaml.constructor.BaseConstructor.constructDocument(BaseConstructor.java:142)

     org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:128)

     org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)

     org.yaml.snakeyaml.Yaml.load(Yaml.java:411)

Любая идея, почему это происходит?


person Cloud    schedule 24.10.2012    source источник


Ответы (2)


Мануэль, спасибо за помощь.

Когда я немного изменил YAML, он заработал, я просто удалил «-», который стоит перед «model.class».

#Users
users:
    - !!models.User
        email:      [email protected]
        password:   secret
        fullname:   Bob
        isAdmin:    true
#Posts

posts:

    - !!models.Post
        id:         1
        title:      About the model layer
        postedAt:   2009-06-14
        author: !!models.User
                email: [email protected]
        content:    >
                    The model has a central position in a Play! application. Cut....   

Есть идеи, что означает "-"?

person Cloud    schedule 25.10.2012
comment
Я думаю '-' сказать элемент в списке - person Maxence; 14.12.2012

Я уже давно работал с YAML, но похоже, что вы воссоздаете нового пользователя в сообщении, а не ссылаетесь на Боба.

Я бы попробовал что-то вроде этого:

models.User(bob):
  email:      [email protected]
  password:   secret
  fullname:   Bob
  isAdmin:    true

models.Post(firstPost):
  id:         1
  title:      About the model layer
  postedAt:   2009-06-14
  author:     bob
  content:    The model has a central position in a Play! application.
person Manuel Bernhardt    schedule 25.10.2012