EsotericSoftware / jsonbeans

Java object graphs, to and from JSON automatically
BSD 3-Clause "New" or "Revised" License
91 stars 30 forks source link

JsonBeans Serialization trace error #9

Closed ThanosFisherman closed 10 years ago

ThanosFisherman commented 10 years ago

I get this error both on my project and on simple tutorial example. Here is the code from simple tutorial

Main class:

public class Main
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {

        Person person = new Person();
        person.setName("Nate");
        person.setAge(31);

        ArrayList<PhoneNumber> numbers = new ArrayList<>();

        PhoneNumber phone1 = new PhoneNumber();
        PhoneNumber phone2 = new PhoneNumber();

        phone1.setName("Nate");
        phone1.setNumber("0343535");
        phone2.setName("Thanos");
        phone2.setNumber("2442422");

        numbers.add(phone1);
        numbers.add(phone2);

        person.setNumbers(numbers);

        Json json = new Json();
        json.setOutputType(OutputType.json);

        String text = json.toJson(person);
        System.out.println(json.prettyPrint(text));

    }

Person Model

public class Person
{
    private String name;
    private int age;
    private ArrayList<PhoneNumber> numbers;
    //private PersonMock personMock;

    public Person()
    {
    }

    public void setNumbers(ArrayList<PhoneNumber> numbers)
    {
        this.numbers = numbers;

    }
    public ArrayList<PhoneNumber> getNumbers() { return numbers; }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public int getAge()
    {
        return age;
    }

    public void setAge(int age)
    {
        this.age = age;
    }

}

PhoneNumber Model

public class PhoneNumber
{
    private String name;
    private String number;

    public PhoneNumber()
    {
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getNumber()
    {
        return number;
    }

    public void setNumber(String number)
    {
        this.number = number;
    }

}

Original Project Im currently working on

public void writeToFile(Context ctx, VenueSearchRoot obj)
    {   
    Json json = new Json();
    json.setOutputType(OutputType.json);
    //if (!file.mkdirs())
    System.out.println(json.prettyPrint(obj));  
    }
}

Where VenueSearchRoot is the Root model

public class VenueSearchRoot
{
    private ArrayList<Venue> venues;

    public VenueSearchRoot()
    {
    }

    public ArrayList<Venue> getVenues()
    {
        return venues;
    }

    public void setVenues(ArrayList<Venue> venues)
    {
        this.venues = venues;
    }
}

The error:

Exception in thread "main" com.esotericsoftware.jsonbeans.JsonException: Serialization trace:
private java.util.ArrayList Person.numbers (Person)
    at com.esotericsoftware.jsonbeans.Json.writeFields(Json.java:267)
    at com.esotericsoftware.jsonbeans.Json.writeValue(Json.java:514)
    at com.esotericsoftware.jsonbeans.Json.toJson(Json.java:216)
    at com.esotericsoftware.jsonbeans.Json.toJson(Json.java:172)
    at com.esotericsoftware.jsonbeans.Json.toJson(Json.java:161)
    at Main.main(Main.java:39)
Caused by: java.lang.IllegalStateException: Name must be set.
    at com.esotericsoftware.jsonbeans.JsonWriter.object(JsonWriter.java:64)
    at com.esotericsoftware.jsonbeans.Json.writeObjectStart(Json.java:552)
    at com.esotericsoftware.jsonbeans.Json.writeValue(Json.java:513)
    at com.esotericsoftware.jsonbeans.Json.writeValue(Json.java:460)
    at com.esotericsoftware.jsonbeans.Json.writeFields(Json.java:260)
    ... 5 more

Everything is initialized before the parsing as it should Let me know if you need anything else

NathanSweet commented 10 years ago

Thanks!