Hi,

I think you can use the method described in the jaggery docs [1]  as well.
Also this does not include the getUserListOfRole method, but I see that
GayanD has done the changes for it[2].

[1] http://jaggeryjs.org/documentation.jag?api=UserManager
[2] [Dev] [Jaggery] Adding getUserListOfRole to the user-manager.js

On Thu, May 7, 2015 at 2:22 PM, Sajith Ariyarathna <sajit...@wso2.com>
wrote:

> I tried different approaches with
> org.wso2.carbon.user.api.UserStoreManager OSGi service, however I
> couldn't overcome the NullPointerException. I think one must initialize
> the UserStoreManager service before using it, but couldn't find an
> initializing method.
>
> *Solution:*
> Instead of using UserStoreManager OSGi service, I used
> org.wso2.carbon.user.core.service.RealmService OSGi service. Using the
> RealmService you can get TenantUserRealm object for a given tenant ID.
> From that you can get an UserStoreManager object. This object (usManager)
> has all functionality of UserStoreManager OSGi service. Refer following
> sample code.
>
>
> var carbon = require('carbon');
> var store = require('store');
> var server = store.server;
>
> function test(role){
> var realmService =
> carbon.server.osgiService('org.wso2.carbon.user.core.service.RealmService');
> var tenantId = server.current(session).tenantId;
> var usManager =
> realmService.getTenantUserRealm(tenantId).getUserStoreManager();
> return usManager.getUserListOfRole(role);
> }
>
>
>
> Thanks & regards.
>
> On Tue, Apr 21, 2015 at 10:52 AM, Sajith Ariyarathna <sajit...@wso2.com>
> wrote:
>
>> I'm developing a web app for AppM and I want to do some user management
>> tasks.
>>
>> - retrieving all users for a given role
>> - retrieving claims of a given user
>>
>> To accomplish above tasks, I want to call getUserListOfRole() method &
>> getUserClaimValues() method in the org.wso2.carbon.user.api.UserStoreManager
>> OSGi service. I wrote my Jaggery code as following based on [1] & [2].
>>
>> routeManager.register('GET', 'publisher',
>> '/publisher/api/provisioning/users/{role}', function (context) {
>>      log.info("### in API call");
>> var role = context.params.role;
>> var carbon = require('carbon');
>> var userService =
>> carbon.server.osgiService('org.wso2.carbon.user.api.UserStoreManager');
>> log.info("### acquired OSGi service");
>> *#30* var usrs = userService.getUserListOfRole(role);
>>
>> print(usrs);
>> });
>>
>> Above code gives me a NullPointerException.
>>
>> [2015-04-21 10:40:02,575]  INFO - provisioning_api_router:jag ### in API
>> call
>> [2015-04-21 10:40:02,579]  INFO - provisioning_api_router:jag ###
>> acquired OSGi service
>> [2015-04-21 10:40:02,583] ERROR - WebAppManager
>> org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>> org.jaggeryjs.scriptengine.exceptions.ScriptException:
>> org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:571)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:273)
>>         at
>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:536)
>>         at
>> org.jaggeryjs.jaggery.core.JaggeryServlet.doGet(JaggeryServlet.java:24)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:378)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
>>         at
>> org.jaggeryjs.jaggery.core.JaggeryFilter.doFilter(JaggeryFilter.java:21)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>         at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
>>         at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>>         at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
>>         at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>>         at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>>         at
>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156)
>>         at
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52)
>>         at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>>         at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
>>         at
>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
>>         at
>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>>         at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
>>         at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
>>         at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>         at java.lang.Thread.run(Thread.java:662)
>> Caused by: org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>>         at
>> org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1754)
>>         at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:148)
>>         at
>> org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_anonymous_3(/publisher/apis/v1/provisioning_api_router.jag:30)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c4._c_anonymous_12(/publisher/modules/router-g.js:183)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c4.call(/publisher/modules/router-g.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_anonymous_1(/publisher/apis/v1/provisioning_api_router.jag:45)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430)
>>         at
>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269)
>>         at
>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6._c_anonymous_17(/publisher/modules/publisher.js:438)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6.call(/publisher/modules/publisher.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call0(OptRuntime.java:23)
>>         at
>> org.mozilla.javascript.gen._store__server_js_18._c_anonymous_17([store]/server.js:271)
>>         at
>> org.mozilla.javascript.gen._store__server_js_18.call([store]/server.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6._c_anonymous_16(/publisher/modules/publisher.js:433)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6.call(/publisher/modules/publisher.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_script_0(/publisher/apis/v1/provisioning_api_router.jag:4)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
>>         at
>> org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.exec(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:567)
>>         ... 37 more
>> Caused by: java.lang.NullPointerException
>>         at
>> org.wso2.carbon.user.core.util.UserCoreUtil.getDomainName(UserCoreUtil.java:487)
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.getUserStore(AbstractUserStoreManager.java:2385)
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.isExistingRole(AbstractUserStoreManager.java:1574)
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.getUserListOfRole(AbstractUserStoreManager.java:2018)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:597)
>>         at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
>>         ... 67 more
>>
>> Even calling a method with no parameters, such as getRoleNames() gives
>> a NullPointerException.
>>
>> routeManager.register('GET', 'publisher',
>> '/publisher/api/provisioning/users/{role}', function (context) {
>>      log.info("### in API call");
>> var role = context.params.role;
>> var carbon = require('carbon');
>> var userService =
>> carbon.server.osgiService('org.wso2.carbon.user.api.UserStoreManager');
>> log.info("### acquired OSGi service");
>> #30 var usrs = userService.getRoleNames();
>>
>> print(usrs);
>> });
>>
>> [2015-04-21 10:45:24,083]  INFO - provisioning_api_router:jag ### in API
>> call
>> [2015-04-21 10:45:24,084]  INFO - provisioning_api_router:jag ###
>> acquired OSGi service
>> [2015-04-21 10:45:24,085] ERROR - WebAppManager
>> org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>> org.jaggeryjs.scriptengine.exceptions.ScriptException:
>> org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:571)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:273)
>>         at
>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:536)
>>         at
>> org.jaggeryjs.jaggery.core.JaggeryServlet.doGet(JaggeryServlet.java:24)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:378)
>>         at
>> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
>>         at
>> org.jaggeryjs.jaggery.core.JaggeryFilter.doFilter(JaggeryFilter.java:21)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>         at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
>>         at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
>>         at
>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
>>         at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>>         at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>>         at
>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156)
>>         at
>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>>         at
>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52)
>>         at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>>         at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
>>         at
>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
>>         at
>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>>         at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
>>         at
>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
>>         at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
>>         at
>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>         at java.lang.Thread.run(Thread.java:662)
>> Caused by: org.mozilla.javascript.WrappedException: Wrapped
>> java.lang.NullPointerException
>> (/publisher/apis/v1/provisioning_api_router.jag#30)
>>         at
>> org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1754)
>>         at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:148)
>>         at
>> org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:225)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.callProp0(OptRuntime.java:85)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_anonymous_3(/publisher/apis/v1/provisioning_api_router.jag:30)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:32)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c4._c_anonymous_12(/publisher/modules/router-g.js:183)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c4.call(/publisher/modules/router-g.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_anonymous_1(/publisher/apis/v1/provisioning_api_router.jag:45)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2430)
>>         at
>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:269)
>>         at
>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:97)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6._c_anonymous_17(/publisher/modules/publisher.js:438)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6.call(/publisher/modules/publisher.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call0(OptRuntime.java:23)
>>         at
>> org.mozilla.javascript.gen._store__server_js_18._c_anonymous_17([store]/server.js:271)
>>         at
>> org.mozilla.javascript.gen._store__server_js_18.call([store]/server.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:42)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6._c_anonymous_16(/publisher/modules/publisher.js:433)
>>         at
>> org.jaggeryjs.rhino.publisher.modules.c6.call(/publisher/modules/publisher.js)
>>         at
>> org.mozilla.javascript.optimizer.OptRuntime.callN(OptRuntime.java:52)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1._c_script_0(/publisher/apis/v1/provisioning_api_router.jag:4)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:394)
>>         at
>> org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3091)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.call(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.jaggeryjs.rhino.publisher.apis.v_1.c1.exec(/publisher/apis/v1/provisioning_api_router.jag)
>>         at
>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:567)
>>         ... 37 more
>> Caused by: java.lang.NullPointerException
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.getRoleNames(AbstractUserStoreManager.java:2555)
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.getRoleNames(AbstractUserStoreManager.java:2489)
>>         at
>> org.wso2.carbon.user.core.common.AbstractUserStoreManager.getRoleNames(AbstractUserStoreManager.java:2482)
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:597)
>>         at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:126)
>>         ... 67 more
>>
>>
>> Any help on this matter is greatly appreciated.
>>
>> [1]
>> https://github.com/wso2/product-app-manager/blob/master/modules/jaggery-apps/app-publisher-web/apis/v1/lifecycle_api_router.jag#L306
>> <https://github.com/sajithar/product-app-manager/blob/provisioning/modules/jaggery-apps/app-publisher-web/apis/v1/lifecycle_api_router.jag#L325>
>> [2]
>> http://supunsetunga.blogspot.com/2014/12/calling-osgi-services-from-jaggery-app.html
>>
>> Thanks & Regards.
>> --
>> Sajith Ariyarathna
>> Software Engineer; WSO2, Inc.;  http://wso2.com/
>> mobile: +94 77 6602284, +94 71 3951048
>>
>
>
>
> --
> Sajith Ariyarathna
> Software Engineer; WSO2, Inc.;  http://wso2.com/
> mobile: +94 77 6602284, +94 71 3951048
>
> _______________________________________________
> Dev mailing list
> Dev@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
Thanks and Regards
*,Shani Ranasinghe*
Senior Software Engineer
WSO2 Inc.; http://wso2.com
lean.enterprise.middleware

mobile: +94 77 2273555
linked in: lk.linkedin.com/pub/shani-ranasinghe/34/111/ab
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to