Thanks Rasika & Chamila Wijayarathna,

Earlier I didn't specify the serialVersionUID. Now I set that as the
expected one (1179165995021182755L). It's working fine.

 @ Chamila Wijayarathna: Do I need to delete the database? If so, can you
give reference to do that?

Thanks

On Wed, Nov 11, 2015 at 10:50 AM, Chamila Wijayarathna <[email protected]>
wrote:

> Hi Shakila,
>
> It seems like you are using the same database you used with IS 5.0.0,
> after moving to 5.1.0 beta.
>
> If you are using the same database as your previous setup, those
> scripts/tables may not compatible with what are expected in 5.1.0. You may
> have to migrate or otherwise you can delete the previous database and start
> IS again with -Dsetup. If 2nd option is possible, it would be the easiest.
>
> The reason for the error is as I understand, we have fixed [1] in IS 5.1.0
> and there we have changed serielVersionUID s of some objects which are
> saved to databases as blobs by serializing. So when you try to retrieve old
> entry which written to database in prior IS version would be serialized
> with a 1 serialversionUID and when retrieving it from database after
> migration, it try to deserialize, but version ID's does not match. So due
> to that it fails to deserialize and this error occurs.
>
> Thanks
>
> [1]. https://wso2.org/jira/browse/IDENTITY-3621
>
> On Wed, Nov 11, 2015 at 10:27 AM, Chamila Wijayarathna <[email protected]>
> wrote:
>
>> Hi Shakila,
>>
>> Can you please share a link of the source code of Tiqr authenticator you
>> are working with.
>>
>> Thanks.
>>
>> On Wed, Nov 11, 2015 at 10:08 AM, Rasika Perera <[email protected]> wrote:
>>
>>> Hi Shakila,
>>>
>>> First error is more like deserialization issue. The
>>> "InvalidClassException" usually occurs when the receiver has loaded a class
>>> for the object that has a different serialVersionUID than that of the
>>> corresponding sender's class.
>>>
>>> Have you defined explicitly "serialVersionUID" in your serializable
>>> class "TiqrAuthenticator"? If you do not explicitly declare this,
>>> serialization runtime will calculate this based on the various aspect of
>>> the class. According to the java doc[1], recommended way is to explicitly
>>> declare serialVersionUID values, since the default serialVersionUID
>>> computation is highly sensitive to class details that may vary depending on
>>> compiler implementations, and can thus result in unexpected
>>> InvalidClassExceptions during deserialization.
>>>
>>> [1] http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html
>>>
>>> Thanks,
>>> Rasika
>>>
>>> On Wed, Nov 11, 2015 at 8:18 AM, Shakila Sivagnanarajah <
>>> [email protected]> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I implemented IS authenticator for Tiqr for IS 5.0.0 earlier. Now to
>>>> enable another feature with association I need to modify the authenticator
>>>> for 5.1.0. I used wso2is-5.1.0-beta for this. Since required dependencies
>>>> (artifacts versioned as 5.1.0-beta) not in nexus, I put them locally and
>>>> given local path in pom. Now I'm getting two errors. I mentioned them here.
>>>> Can anyone help me to resolve this?
>>>>
>>>> [1] This is caused while retrieving previous session data.
>>>>
>>>> in FrameworkUtils:
>>>> SessionContextCacheEntry cacheEntryObj =
>>>> SessionContextCache.getInstance().getValueFromCache(cacheKey);
>>>> returns null
>>>>
>>>> I got this stack-trace:
>>>> [2015-11-11 07:38:22,258] ERROR
>>>> {org.wso2.carbon.identity.application.authentication.framework.store.SessionDataStore}
>>>> -  Error while retrieving session data
>>>>
>>>> java.io.InvalidClassException:
>>>> org.wso2.carbon.identity.authenticator.TiqrAuthenticator; local class
>>>> incompatible: stream classdesc serialVersionUID = 1179165995021182755,
>>>> local class serialVersionUID = 7666485910146971411
>>>>
>>>> at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:604)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
>>>>
>>>> at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
>>>>
>>>> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
>>>>
>>>> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
>>>>
>>>> at java.util.HashMap.readObject(HashMap.java:1155)
>>>>
>>>> at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
>>>>
>>>> at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>
>>>> at java.lang.reflect.Method.invoke(Method.java:601)
>>>>
>>>> at
>>>> java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
>>>>
>>>> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1866)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
>>>>
>>>> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1964)
>>>>
>>>> at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1888)
>>>>
>>>> at
>>>> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
>>>>
>>>> at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>>>>
>>>> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.store.SessionDataStore.getBlobObject(SessionDataStore.java:428)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.store.SessionDataStore.getSessionContextData(SessionDataStore.java:275)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.cache.SessionContextCache.getValueFromCache(SessionContextCache.java:93)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.util.FrameworkUtils.getSessionContextFromCache(FrameworkUtils.java:571)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.findPreviousAuthenticatedSession(DefaultRequestCoordinator.java:290)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.initializeFlow(DefaultRequestCoordinator.java:228)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:109)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doGet(CommonAuthenticationServlet.java:43)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.ui.filters.CSRFPreventionFilter.doFilter(CSRFPreventionFilter.java:88)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.ui.filters.CRLFPreventionFilter.doFilter(CRLFPreventionFilter.java:59)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61)
>>>>
>>>> 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:504)
>>>>
>>>> at
>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
>>>>
>>>> at
>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>>>>
>>>> at
>>>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
>>>>
>>>> at
>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
>>>>
>>>> at
>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>>>>
>>>> at
>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
>>>>
>>>> at
>>>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
>>>>
>>>> at
>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>>>>
>>>> at
>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
>>>>
>>>> at
>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
>>>>
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>>>>
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>>>>
>>>> at
>>>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>>>
>>>> at java.lang.Thread.run(Thread.java:722)
>>>>
>>>>
>>>>
>>>> [2] DefaultRequestCoordinator throws:
>>>>
>>>> [2015-11-11 07:44:17,712] ERROR
>>>> {org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator}
>>>> -  Exception in Authentication Framework
>>>>
>>>> java.lang.NullPointerException
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handlePostAuthentication(DefaultStepBasedSequenceHandler.java:255)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.sequence.impl.DefaultStepBasedSequenceHandler.handle(DefaultStepBasedSequenceHandler.java:156)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultAuthenticationRequestHandler.handle(DefaultAuthenticationRequestHandler.java:112)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.handler.request.impl.DefaultRequestCoordinator.handle(DefaultRequestCoordinator.java:125)
>>>>
>>>> at
>>>> org.wso2.carbon.identity.application.authentication.framework.servlet.CommonAuthenticationServlet.doPost(CommonAuthenticationServlet.java:53)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.helper.ContextPathServletAdaptor.service(ContextPathServletAdaptor.java:37)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128)
>>>>
>>>> at
>>>> org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:60)
>>>>
>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.ui.filters.CSRFPreventionFilter.doFilter(CSRFPreventionFilter.java:88)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.ui.filters.CRLFPreventionFilter.doFilter(CRLFPreventionFilter.java:59)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
>>>>
>>>> at
>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61)
>>>>
>>>> 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:504)
>>>>
>>>> at
>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
>>>>
>>>> at
>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47)
>>>>
>>>> at
>>>> org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159)
>>>>
>>>> at
>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
>>>>
>>>> at
>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57)
>>>>
>>>> at
>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
>>>>
>>>> at
>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
>>>>
>>>> at
>>>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
>>>>
>>>> at
>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
>>>>
>>>> at
>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)
>>>>
>>>> at
>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698)
>>>>
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
>>>>
>>>> at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
>>>>
>>>> at
>>>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>>>
>>>> at java.lang.Thread.run(Thread.java:722)
>>>>
>>>> Note:
>>>>
>>>> After completing the authentication in processAuthenticationResponse,
>>>> AuthenticatorFlowStatus e = authenticator.process(request, response,
>>>> context);
>>>> (found in DefaultStepHandler) returns "INCOMPLETE".
>>>>
>>>>
>>>> --
>>>> Shakila Sivagnanarajah
>>>> Associate Software Engineer
>>>> Mobile :+94 (0) 770 760240
>>>> [email protected]
>>>>
>>>> _______________________________________________
>>>> Dev mailing list
>>>> [email protected]
>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>
>>>>
>>>
>>>
>>> --
>>> With Regards,
>>>
>>> *Rasika Perera*
>>> Software Engineer
>>> M: +94 71 680 9060 E: [email protected]
>>> LinkedIn: http://lk.linkedin.com/in/rasika90
>>>
>>> WSO2 Inc. www.wso2.com
>>> lean.enterprise.middleware
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> [email protected]
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> *Chamila Dilshan Wijayarathna,*
>> Software Engineer
>> Mobile:(+94)788193620
>> WSO2 Inc., http://wso2.com/
>>
>
>
>
> --
> *Chamila Dilshan Wijayarathna,*
> Software Engineer
> Mobile:(+94)788193620
> WSO2 Inc., http://wso2.com/
>



-- 
Shakila Sivagnanarajah
Associate Software Engineer
Mobile :+94 (0) 770 760240
[email protected]
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to