HI all,

The issue was solved by adding <importBundleDef> for
jackson-databind,jackson-annotations,jackson-core for POM[1] .

By the Way I would like to discuss more regarding this mail.

*Issue I am trying to solve*

 - I am getting empty JSON string ("{}") when logging Java object.
 - Empty JSON string("{}") will give wrong information to user.

*Proposed solution*

  - give the user proper understandable log message.
  - the logging need to be fast and summarized.

So I am planning to log in-case of Java object as below without logging
whole object.
{ "javaObject" : true, "hashCode" : "39d92a", "class" :
"org.wso2.apim.StoreHostObject"}

You can find these links[2][3] as resources to get an idea.

[1] -
https://github.com/wso2/jaggery/blob/master/features/org.jaggeryjs.server.feature/pom.xml
[2] -
https://github.com/wso2/jaggery/blob/master/components/hostobjects/org.jaggeryjs.hostobjects.log/src/main/java/org/jaggeryjs/hostobjects/log/LogHostObject.java
[3] -
https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java


On Wed, Feb 3, 2016 at 10:27 AM, Rajeenthini Satkunam <rajeenth...@wso2.com>
wrote:

> HI Niranjan,
>
> Ya sure.I will meet you today.
>
> On Wed, Feb 3, 2016 at 9:25 AM, Niranjan Karunanandham <niran...@wso2.com>
> wrote:
>
>> Hi Rajeenthini,
>>
>>
>> On Wed, Feb 3, 2016 at 9:19 AM, Rajeenthini Satkunam <
>> rajeenth...@wso2.com> wrote:
>>
>>> HI All,
>>>
>>> Thank you chamara and sajith for your valuable suggestions.I have done
>>> the improvement in Jaggery to log the java Object.
>>>
>>> improvement
>>> -----------------
>>> 1)
>>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L78
>>>
>>> Added new code segment as per sajith's suggestion
>>>
>>> try{
>>>     return (new ObjectMapper().writeValueAsString(obj));
>>> }catch (Exception e){
>>>     log.debug("Object " + obj.toString() + " of class " + obj.getClass() + 
>>> " cannot be converted to JSON");
>>> }
>>>
>>> return "{}";
>>>
>>>
>>> 2) https://github.com/wso2/jaggery/blob/master/pom.xml
>>>
>>> Added maven dependencies for Jackson data-bind and annotations
>>>
>>> <dependency>
>>>     <groupId>com.fasterxml.jackson.core</groupId>
>>>     <artifactId>jackson-annotations</artifactId>
>>>     <version>${jackson.version}</version>
>>> </dependency>
>>> <dependency>
>>>     <groupId>com.fasterxml.jackson.core</groupId>
>>>     <artifactId>jackson-databind</artifactId>
>>>     <version>${jackson.version}</version>
>>> </dependency>
>>>
>>> 3) 
>>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/pom.xml
>>>
>>> Added maven dependencies for Jackson data-bind and annotations
>>>
>>>
>>> I have tried to build(mvn clean install) Jaggery and product-Jaggery
>>> respectively.I can build Jaggery successfully But It has failed when
>>> building product Jaggery at Jaggery - Profile Generation.
>>>
>>> As per offline discussion with Niranjan I have added <importBundleDef>
>>> and <*dependency*> for Jackson data-bind and annotation in POM.xml[
>>> https://github.com/wso2/jaggery/blob/master/features/org.jaggeryjs.server.feature/pom.xml]
>>> file as below.
>>>
>>> <importBundleDef>com.fasterxml.jackson.core:jackson-databind</importBundleDef>
>>> <importBundleDef>com.fasterxml.jackson.core:jackson-annotations</importBundleDef>
>>>
>>>
>>> <dependency>
>>>     <groupId>com.fasterxml.jackson.core</groupId>
>>>     <artifactId>jackson-databind</artifactId>
>>> </dependency>
>>> <dependency>
>>>     <groupId>com.fasterxml.jackson.core</groupId>
>>>     <artifactId>jackson-annotations</artifactId>
>>> </dependency>
>>>
>>>
>>> But Still I am getting product Jaggery build fail at the point Jaggery - 
>>> Profile Generation,following error can be observe in the command line.
>>>
>>>
>>> Installation failed.Cannot complete the install because one or more 
>>> required items could not be found.
>>>
>>>  Software being installed: uuid Module - Feature 1.4.3 
>>> (org.jaggeryjs.modules.uuid.feature.group 1.4.3)
>>>  Missing requirement: jackson-databind 2.0.0 (jackson-databind 2.0.0) 
>>> requires 'package com.fasterxml.jackson.core [2.0.0,3.0.0)' but it could 
>>> not be found
>>>  Cannot satisfy dependency:
>>>   From: org.jaggeryjs.modules.uuid 1.4.3 (org.jaggeryjs.modules.uuid 1.4.3)
>>>   To: package org.jaggeryjs.scriptengine.exceptions [0.11.0,1.0.0)
>>>  Cannot satisfy dependency:
>>>
>>>   From: uuid Module - Feature 1.4.3 
>>> (org.jaggeryjs.modules.uuid.feature.group 1.4.3)
>>>   To: org.jaggeryjs.modules.uuid [1.4.3]
>>>  Cannot satisfy dependency:
>>>   From: org.jaggeryjs.scriptengine 0.12.1.SNAPSHOT 
>>> (org.jaggeryjs.scriptengine 0.12.1.SNAPSHOT)
>>>   To: package com.fasterxml.jackson.databind [2.0.0,3.0.0)
>>> Application failed, log file location: 
>>> /home/rajee/.m2/repository/org/eclipse/tycho/tycho-p2-runtime/0.13.0/eclipse/configuration/1454469448601.log
>>>
>>>
>>> Can anyone help me to figure out the cause of build fail.Hope I have 
>>> included all the steps I have followed.Your help would be appreciated.
>>>
>>> As per the error, the build is failing because jackson-databind requires
>> com.fasterxml.jackson.core within the range 2.0.0 and 3.0.0. If this is
>> required by the feature then you need to bundle it in the feature. Shall we
>> have a look at this today?
>>
>>>
>>>
>>>
>>> On Tue, Feb 2, 2016 at 10:23 AM, Rajeenthini Satkunam <
>>> rajeenth...@wso2.com> wrote:
>>>
>>>> Hi sajith,
>>>>
>>>> Noted and thank you for the suggestions.
>>>>
>>>> On Mon, Feb 1, 2016 at 11:53 PM, Sajith Ariyarathna <sajit...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi Rajeenthini,
>>>>>
>>>>> You are hoping to add the following code snippet to the serializeJSON
>>>>> method [1] of the org.jaggeryjs.scriptengine.util.HostObjectUtil
>>>>> class.
>>>>>
>>>>>>     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 + "\"}";
>>>>>>
>>>>>> There are few issue in this code snippet.
>>>>>
>>>>>    - Don't catch generic Exception, always catch a specific
>>>>>    exception. In here you should catch JsonProcessingException [2].
>>>>>    - Don't use System.out.println to log exceptions. Instead use a
>>>>>    proper logger. HostObjectUtil class has a log object defined in
>>>>>    line 30 [3], you can use that.
>>>>>    - Returning '{"javaObject": "true", "object": "{ ... }"}' string
>>>>>    gives a wrong impression that there are two attributes called 
>>>>> 'javaObject'
>>>>>    & 'object' in the logged object. I think just returning the JSON string
>>>>>    will be enough.
>>>>>
>>>>> After corrections (I also took the liberty to reduce no of lines):
>>>>>
>>>>> try {
>>>>>
>>>>> return (new ObjectMapper()).writeValueAsString(obj);
>>>>>
>>>>> } catch (JsonProcessingException e) {
>>>>>
>>>>> log.debug("Object " + obj.toString() + " of class " +
>>>>> obj.getClassName() + " cannot be converted to JSON");
>>>>>
>>>>> }
>>>>>
>>>>> return "{}";
>>>>>
>>>>>
>>>>> [1]
>>>>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L78
>>>>> [2]
>>>>> https://static.javadoc.io/com.fasterxml.jackson.core/jackson-databind/2.6.3/com/fasterxml/jackson/databind/ObjectMapper.html#writeValueAsString(java.lang.Object)
>>>>> [3]
>>>>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L30
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
>>>>> On Mon, Feb 1, 2016 at 8:13 PM, Rajeenthini Satkunam <
>>>>> rajeenth...@wso2.com> wrote:
>>>>>
>>>>>> 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 <%2B94770832823>   *
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sajith Ariyarathna
>>>>> Software Engineer; WSO2, Inc.;  http://wso2.com/
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> *Thank You.*
>>>>
>>>> *Rajeenthini Satkunam*
>>>>
>>>> *Associate Software Engineer | WSO2*
>>>>
>>>>
>>>> *E:rajeenth...@wso2.com <rajeenth...@wso2.com>*
>>>>
>>>> *M :+94770832823 <%2B94770832823>   *
>>>>
>>>>
>>>
>>>
>>> --
>>>
>>> *Thank You.*
>>>
>>> *Rajeenthini Satkunam*
>>>
>>> *Associate Software Engineer | WSO2*
>>>
>>>
>>> *E:rajeenth...@wso2.com <rajeenth...@wso2.com>*
>>>
>>> *M :+94770832823 <%2B94770832823>   *
>>>
>>>
>>
>> Regards,
>> Nira
>>
>> --
>>
>> *Niranjan Karunanandham*
>> Senior Software Engineer - WSO2 Inc.
>> WSO2 Inc.: http://www.wso2.com
>>
>
>
>
> --
>
> *Thank You.*
>
> *Rajeenthini Satkunam*
>
> *Associate Software Engineer | WSO2*
>
>
> *E:rajeenth...@wso2.com <rajeenth...@wso2.com>*
>
> *M :+94770832823 <%2B94770832823>   *
>
>


-- 

*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