Hi sajith,

i have added this Student class for example.As for current implementation
goes like this way in Jaggery below.

public static String serializeJSON(Object obj) {
    if (obj instanceof Wrapper) {
        obj = ((Wrapper) obj).unwrap();
    }
    if (obj == null) {
        return "null";
    }
    if (obj instanceof Undefined) {
        return "null";
    }
    if (obj instanceof Boolean) {
        return Boolean.toString((Boolean) obj);
    }
    if (obj instanceof String) {
        return serializeString((String) obj);
    }
    if (obj instanceof ConsString) {
        return serializeString(obj.toString());
    }
    if (obj instanceof Number) {
        return obj.toString();
    }
    if (obj instanceof XMLObject) {
        return serializeString(serializeXML((ScriptableObject) obj));
    }
    if (obj instanceof NativeObject) {
        return serializeNativeObject((NativeObject) obj);
    }
    if (obj instanceof NativeArray) {
        return serializeNativeArray((NativeArray) obj);
    }
    if (obj instanceof Object[]) {
        return serializeObjectArray((Object[]) obj);
    }
    if (obj instanceof Scriptable) {
        Scriptable object = (Scriptable) obj;
        String jsClass = object.getClassName();
        if ("Date".equals(jsClass)) {
            return serializeString(serializeNativeDate(object));
        } else if ("Error".equals(jsClass)) {
            return serializeString(serializeNativeError(object));
        }
    }
    String JsonString = null;
    try{
        ObjectMapper mapper = new ObjectMapper();
        JsonString = mapper.writeValueAsString(obj);
    }catch (Exception e){
        System.out.println(e.getMessage());
    }

    return "{\"javaObject\":\"true\",\"object\":\"" + JsonString + "\"}";
}

AFAIU since we are parsing Object type of argument It is better we can use
ObjectMapper.Correct me If I am wrong.Your suggestion would be more
appreciated.

On Sun, Jan 31, 2016 at 10:23 AM, Sajith Ariyarathna <sajit...@wso2.com>
wrote:

> Hi Rajeenthini,
>
> AFAIK ability to convert a POJO into JSON object does nor affect the
> output of a Jaggery Log of that POJO.
> To get a proper log output for a Java object, you need to implement the
> "toString" method in that Java class. For example in your case,
>
> public class Student {
>
> ...
>
> public String toString() {
>
> return "{name: " + this.name + ", age: " + this.age + ", indexNo: " +
> this.indexNo + "}";
>
> }
>
> }
>
> Now you can log a Student object in your Jaggery code as following.
>
> log.info(studentObj.toString());
>
>
> Thanks.
>
>
>
> On Sat, Jan 30, 2016 at 9:28 PM, Rajeenthini Satkunam <
> rajeenth...@wso2.com> wrote:
>
>> Hi,
>>
>> I have worked on writing Jaggery test for Jaggery-Product.I can observe
>> when we tried to log the object it always gives us empty JSON
>> ({}).Currently the implementation goes this way when we try to log java
>> object.
>>
>> So I was trying to get rid of this observed behavior of Jaggery.I have
>> gone through a solution.
>>
>> *using Jackson[1] *
>>
>> We can convert java object to JSON[2] and can log it.
>>
>> I have shared the piece of code I have tried out with Jackson below.
>>
>> *Simple POJO Student class*
>>
>> public class Student {
>>     private int age;
>>     private String name;
>>     private String indexNo;
>>
>>     public int getAge() {
>>         return age;
>>     }
>>
>>     public void setAge(int age) {
>>         this.age = age;
>>     }
>>
>>     public String getName() {
>>         return name;
>>     }
>>
>>     public void setName(String name) {
>>         this.name = name;
>>     }
>>
>>     public String getIndexNo() {
>>         return indexNo;
>>     }
>>
>>     public void setIndexNo(String indexNo) {
>>         this.indexNo = indexNo;
>>     }
>> }
>>
>> *Simple class to test Jackson*
>>
>> import com.fasterxml.jackson.databind.ObjectMapper;
>> import util.Student;
>> public class MyTest {
>>     public static void main(String args[]){
>>         Student st = new Student();
>>         st.setIndexNo("DS001");
>>         st.setAge(12);
>>         st.setName("kareena");
>>         try{
>>             ObjectMapper mapper = new ObjectMapper();
>>             String jsonInString = mapper.writeValueAsString(st);
>>             
>> System.out.println("************************************************");
>>             System.out.println(jsonInString);
>>             
>> System.out.println("************************************************");
>>
>>         }catch(Exception e){
>>             System.out.print("Exception caught  "+ e);
>>         }
>>
>>     }
>> }
>>
>> Actual output by above code.
>> ************************************************
>> {"age":12,"name":"kareena","indexNo":"DS001"}
>> ************************************************
>>
>> I have added a dependency in the POM.xml
>>
>> <dependency>
>>     <groupId>com.fasterxml.jackson.core</groupId>
>>     <artifactId>jackson-databind</artifactId>
>>     <version>2.6.3</version>
>> </dependency>
>>
>>
>> IMHO we can use the same scenario in case of log JAVA object.Your help
>> and suggestions are more appreciated and guide me if I am wrong or I can
>> have better solution than this.
>>
>> [1] - https://github.com/FasterXML/jackson-databind
>> [2] -
>> http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
>> --
>>
>> *Thank You.*
>>
>> *Rajeenthini Satkunam*
>>
>> *Associate Software Engineer | WSO2*
>>
>>
>> *E:rajeenth...@wso2.com <rajeenth...@wso2.com>*
>>
>> *M :+94770832823 <%2B94770832823>   *
>>
>>
>> _______________________________________________
>> Dev mailing list
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Sajith Ariyarathna
> Software Engineer; WSO2, Inc.;  http://wso2.com/
> mobile: +94 77 6602284, +94 71 3951048
>



-- 

*Thank You.*

*Rajeenthini Satkunam*

*Associate Software Engineer | WSO2*


*E:rajeenth...@wso2.com <rajeenth...@wso2.com>*

*M :+94770832823   *
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to