Hi Sajith,
+1 not longing full object. Logging full object might break existing code
that has logs of Java object in other products. If a developer accidentally
logs a circular references it might even crash the server. Logs are for
getting a bit of information for debug or operational purposes, it
shouldn't be heavy or have any side effects.

A log should be something you should be able to put without worrying too
much.

On Thu, Feb 4, 2016 at 6:41 PM, Sajith Ariyarathna <[email protected]>
wrote:

> 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"}
>>
> -1
>
>    - Think from the JavaScript perspective. When you log an object in
>    Jaggery/JavaScript it gives you the JSON representation of that object.
>    That is the expected behavior. So if you outputs a JSON string as the above
>    suggestion, it gives a wrong impression that there are 3 properties
>    "javaObject", "hasCode" & "class".
>    - Most of the time we log an object to see what is inside that object.
>    Above suggestion does not help in that situation. See the beginning of this
>    mail thread. The original problem you had was 'Jaggery gives "{}" when
>    logging a POJO instead of the JSON representation of that POJO'.
>
> My suggestion is to just output the JSON string of the POJO, If you really
> want to add the Java class name then you can try something like this.
>  (org.wso2.models.Student){"name": "Kamal", "age": "26", "city": "Colombo"}
>
> Thanks.
>
> On Wed, Feb 3, 2016 at 1:00 PM, Rajeenthini Satkunam <[email protected]
> > wrote:
>
>> 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 <
>> [email protected]> wrote:
>>
>>> HI Niranjan,
>>>
>>> Ya sure.I will meet you today.
>>>
>>> On Wed, Feb 3, 2016 at 9:25 AM, Niranjan Karunanandham <
>>> [email protected]> wrote:
>>>
>>>> Hi Rajeenthini,
>>>>
>>>>
>>>> On Wed, Feb 3, 2016 at 9:19 AM, Rajeenthini Satkunam <
>>>> [email protected]> 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 <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi sajith,
>>>>>>
>>>>>> Noted and thank you for the suggestions.
>>>>>>
>>>>>> On Mon, Feb 1, 2016 at 11:53 PM, Sajith Ariyarathna <
>>>>>> [email protected]> 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 <
>>>>>>> [email protected]> 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 <
>>>>>>>> [email protected]> 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 <
>>>>>>>>> [email protected]> 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:[email protected] <[email protected]>*
>>>>>>>>>>
>>>>>>>>>> *M :+94770832823 <%2B94770832823>   *
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dev mailing list
>>>>>>>>>> [email protected]
>>>>>>>>>> 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:[email protected] <[email protected]>*
>>>>>>>>
>>>>>>>> *M :+94770832823 <%2B94770832823>   *
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Sajith Ariyarathna
>>>>>>> Software Engineer; WSO2, Inc.;  http://wso2.com/
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> *Thank You.*
>>>>>>
>>>>>> *Rajeenthini Satkunam*
>>>>>>
>>>>>> *Associate Software Engineer | WSO2*
>>>>>>
>>>>>>
>>>>>> *E:[email protected] <[email protected]>*
>>>>>>
>>>>>> *M :+94770832823 <%2B94770832823>   *
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> *Thank You.*
>>>>>
>>>>> *Rajeenthini Satkunam*
>>>>>
>>>>> *Associate Software Engineer | WSO2*
>>>>>
>>>>>
>>>>> *E:[email protected] <[email protected]>*
>>>>>
>>>>> *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:[email protected] <[email protected]>*
>>>
>>> *M :+94770832823 <%2B94770832823>   *
>>>
>>>
>>
>>
>> --
>>
>> *Thank You.*
>>
>> *Rajeenthini Satkunam*
>>
>> *Associate Software Engineer | WSO2*
>>
>>
>> *E:[email protected] <[email protected]>*
>>
>> *M :+94770832823 <%2B94770832823>   *
>>
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
> Sajith Ariyarathna
> Software Engineer; WSO2, Inc.;  http://wso2.com/
>
> _______________________________________________
> Dev mailing list
> [email protected]
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
With regards,
*Manu*ranga Perera.

phone : 071 7 70 20 50
mail : [email protected]
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to