tags:

views:

23

answers:

2

Hi
I am new to FlexJson and was following http://flexjson.sourceforge.net/ for simple tutorial.
I wrote a simple program but it seems not to be serializing the object attributes. Please help me if someone knows about this

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.webapp.enter;

import flexjson.JSONSerializer;

/**
 *
 * @author harit
 */
class PObject {

       String name;
       int age;
       String country;

        public PObject (String n, int a , String c){
            this.name = n;
            this.country = c;
            this.age = a;
        }

        public String toString(){
            return this.name + this.age + this.country;
        }

        public String[] getData(){
            return new String[]{ this.name, this.country};
        }
}

public class Person{

    public static void main(String main[]){
        PObject person = new PObject("harit",23,"india");
        System.out.println(person.name +  " - " + person.age + " - " + person.country);

        JSONSerializer serializer = new JSONSerializer();
        String out = serializer.serialize(person);
        System.out.println("S : " + out);

    }
}

Output:
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
compile-single:
run-main:
harit - 23 - india
S : {"class":"com.webapp.enter.PObject"}
BUILD SUCCESSFUL (total time: 0 seconds)
A: 

Flexjson works off Java Beans and PObject does not follow the Java Bean specification. You either need to add getters for your properties: name, age, and country, or you need mark those fields public. Either one will work. Add setters if you plan on using JSONDeserializer to deserialize your object.

chubbard
A: 

Hi Chubbard
I tried to modify the code using getter/setter methods, now it fails saying the following. I apologize if I am doing it wrong, I am new to this

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.webapp.enter;

import flexjson.JSONSerializer;

/**
 *
 * @author harit
 */
class PObject {

       String name;
       int age;
       String country;

        public PObject (){

        }

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

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

        public void setCountry(String country){
            this.country = country;
        }

        public String getName(){
            return this.name;
        }

        public int getAge(){
            return this.age;
        }

        public String getCountry(){
            return this.country;
        }

}

public class Person{

    public static void main(String main[]){
        PObject person = new PObject();
        person.setAge(23);
        person.setCountry("usa");
        person.setName("test");
        System.out.println(person.name +  " - " + person.age + " - " + person.country);

        JSONSerializer serializer = new JSONSerializer();
        String out = serializer.serialize(person);
        System.out.println("S : " + out);

    }
}

Output:
test - 23 - usa
Exception in thread "main" flexjson.JSONException: Error trying to deepSerialize
        at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:97)
        at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
        at flexjson.JSONContext.transform(JSONContext.java:75)
        at flexjson.JSONSerializer.serialize(JSONSerializer.java:378)
        at flexjson.JSONSerializer.deepSerialize(JSONSerializer.java:301)
        at com.webapp.enter.Person.main(Person.java:60)
Caused by: java.lang.IllegalAccessException: Class flexjson.transformer.ObjectTransformer can not access a member of class com.webapp.enter.PObject with modifiers "public"
        at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:95)
        at java.lang.reflect.Method.invoke(Method.java:607)
        at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:45)
        ... 5 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
learner
Welcome to StackOverflow ... the protocol here is that you should not write an "answer" to your question that is in fact another part of your question. Either modify your question, or add this as a comment to @Chubbard's answer. Cheers!
Jim Ferrans
Alright Jim, would keep that in mind
learner