Thanks Lakmali.

Ishara Cooray
Senior Software Engineer
Mobile : +9477 262 9512
WSO2, Inc. | http://wso2.com/
Lean . Enterprise . Middleware

On Fri, Mar 11, 2016 at 3:16 PM, Lakmali Baminiwatta <lakm...@wso2.com>
wrote:

> This can happen if you reuse the same refresh token more than once [1].
> Please check whether you are using the latest refresh token returned or
> reusing a old one.
>
> Thanks,
> Lakmali
>
> On 11 March 2016 at 14:59, Ishara Cooray <isha...@wso2.com> wrote:
>
>> Thanks Lakmali. It works!
>>
>> It works for the password grant type as you have pointed out.
>> But for refresh_token grant type i get Provided Authorization Grant is
>> invalid error.
>>
>>  curl -k -d
>> "grant_type=refresh_token&refresh_token=87c4145a25f2e72d6d51edce3362f382&scope=PRODUCTION"
>> -H "Authorization: Basic
>> bTlKZ2dkaXhGOGs3Y09jS1lLcW5ZQU16Q2lBYTphS19meWRraVlmS3k3VXlicEZkMU53eF81WkFh"
>> -H "Content-Type: application/x-www-form-urlencoded"
>> https://api.cloudstaging.wso2.com:8243/token
>> {"error":"invalid_grant","error_description":"Provided Authorization
>> Grant is invalid"}
>>
>> is there something to change here?
>>
>>
>>
>> Ishara Cooray
>> Senior Software Engineer
>> Mobile : +9477 262 9512
>> WSO2, Inc. | http://wso2.com/
>> Lean . Enterprise . Middleware
>>
>> On Fri, Mar 11, 2016 at 2:30 PM, Lakmali Baminiwatta <lakm...@wso2.com>
>> wrote:
>>
>>> Hi Ishara,
>>>
>>> On 11 March 2016 at 14:27, Ishara Cooray <isha...@wso2.com> wrote:
>>>
>>>> Hi Malithi/Pushpalanka,
>>>>
>>>> I tried renewing access token by invoking TokenAPi. Below is my CURL.
>>>>
>>>> curl  -d
>>>> "grant_type=refresh_token&refresh_token=87c4145a25f2e72d6d51edce3362f382&scope=PRODUCTION"
>>>> -H "Authorization:Basic
>>>> bTlKZ2dkaXhGOGs3Y09jS1lLcW5ZQU16Q2lBYTphS19meWRraVlmS3k3VXlicEZkMU53eF81WkFh,
>>>> Content-Type: application/x-www-form-urlencoded"
>>>> https://api.cloudstaging.wso2.com:8243/token -v
>>>>
>>>
>>>  Headers should be sent separately as given in [1]
>>>
>>> [1] https://wso2.org/jira/browse/APIMANAGER-4452
>>>
>>> Thanks,
>>> Lakmali
>>>
>>>> I get Authentication failed error from the above command and Error
>>>> Error decoding authorization header. Space delimited "<authMethod>
>>>> <base64Hash>" format violated. was observed in the keymanager console where
>>>> we have APIM 1.10.0
>>>> {"error":"invalid_client","error_description":"Client Authentication
>>>> failed."}
>>>>
>>>> Followed the doc [1]. What could have went wrong?
>>>>
>>>> If i use the curl --user Client_Id:Client_Secret as pushpalanka
>>>> suggested i get
>>>> {"error":"invalid_grant","error_description":"Provided Authorization
>>>> Grant is invalid"}
>>>>
>>>>
>>>> Console Log:
>>>>
>>>>  ERROR
>>>> {org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint} -
>>>> Error while extracting credentials from authorization header
>>>> {org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint}
>>>> org.wso2.carbon.identity.oauth.common.exception.OAuthClientException:
>>>> Error decoding authorization header. Space delimited "<authMethod>
>>>> <base64Hash>" format violated.
>>>>     at
>>>> org.wso2.carbon.identity.oauth.endpoint.util.EndpointUtil.extractCredentialsFromAuthzHeader(EndpointUtil.java:152)
>>>>     at
>>>> org.wso2.carbon.identity.oauth.endpoint.token.OAuth2TokenEndpoint.issueAccessToken(OAuth2TokenEndpoint.java:82)
>>>>     at sun.reflect.GeneratedMethodAccessor185.invoke(Unknown Source)
>>>>     at
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>     at java.lang.reflect.Method.invoke(Method.java:606)
>>>>     at
>>>> org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:188)
>>>>     at
>>>> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:104)
>>>>     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)
>>>>     at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
>>>>     at
>>>> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
>>>>     at
>>>> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94)
>>>>     at
>>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
>>>>     at
>>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
>>>>     at
>>>> org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:249)
>>>>     at
>>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
>>>>     at
>>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
>>>>     at
>>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
>>>>     at
>>>> org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
>>>>     at
>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:289)
>>>>     at
>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:209)
>>>>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
>>>>     at
>>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:265)
>>>>     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.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:1145)
>>>>     at
>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>>>>     at
>>>> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
>>>>     at java.lang.Thread.run(Thread.java:744)
>>>>
>>>> [1]https://docs.wso2.com/display/APICloud/Token+API
>>>>
>>>> Ishara Cooray
>>>> Senior Software Engineer
>>>> Mobile : +9477 262 9512
>>>> WSO2, Inc. | http://wso2.com/
>>>> Lean . Enterprise . Middleware
>>>>
>>>> On Wed, Oct 7, 2015 at 11:03 PM, Hasintha Indrajee <hasin...@wso2.com>
>>>> wrote:
>>>>
>>>>> We have the same logic in few places to extract authorization header
>>>>> (Not only in Oauth).
>>>>>
>>>>> On Wed, Oct 7, 2015 at 10:59 PM, Malithi Edirisinghe <
>>>>> malit...@wso2.com> wrote:
>>>>>
>>>>>> Hi Hasintha,
>>>>>>
>>>>>> I don't see any usecase for using multiple authorization header
>>>>>> values here. This is used for OAuth Client Authentication [1]. There we
>>>>>> don't have multiple client credentials right.
>>>>>>
>>>>>> [1] https://tools.ietf.org/html/rfc6749#section-2.3
>>>>>>
>>>>>> On Wed, Oct 7, 2015 at 10:21 PM, Hasintha Indrajee <hasin...@wso2.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Malithi,
>>>>>>>
>>>>>>> What happens if we include multiple authorization header values in
>>>>>>> the same header ? As [1] says we can use comma separated values for the
>>>>>>> same header values. Is there a valid use case where we can use two
>>>>>>> authorization header values ?. If so we need to handle this within the
>>>>>>> logic you stated.
>>>>>>>
>>>>>>> [1] http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
>>>>>>>
>>>>>>> On Wed, Oct 7, 2015 at 9:13 PM, Sachith Punchihewa <
>>>>>>> sachi...@wso2.com> wrote:
>>>>>>>
>>>>>>>> @Malithi,
>>>>>>>> Thank you very much for the detailed explanation.Yes when i was
>>>>>>>> debugging the method extract* "Authorization:Basic xxxxxxxxxxxxxx"
>>>>>>>> -H "Content-Type: application/x-www-form-urlencoded"* and then
>>>>>>>> split it.thanks again for the explanation.
>>>>>>>>
>>>>>>>> Cheers.
>>>>>>>>
>>>>>>>> Kamidu Sachith Punchihewa
>>>>>>>> *Software Engineer*
>>>>>>>> WSO2, Inc.
>>>>>>>> lean . enterprise . middleware
>>>>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>>>>
>>>>>>>>
>>>>>>>> Disclaimer: This communication may contain privileged or other
>>>>>>>> confidential information and is intended exclusively for the 
>>>>>>>> addressee/s.
>>>>>>>> If you are not the intended recipient/s, or believe that you may have
>>>>>>>> received this communication in error, please reply to the sender 
>>>>>>>> indicating
>>>>>>>> that fact and delete the copy you received and in addition, you should 
>>>>>>>> not
>>>>>>>> print, copy, retransmit, disseminate, or otherwise use the information
>>>>>>>> contained in this communication. Internet communications cannot be
>>>>>>>> guaranteed to be timely, secure, error or virus-free. The sender does 
>>>>>>>> not
>>>>>>>> accept liability for any errors or omissions.
>>>>>>>>
>>>>>>>> On Wed, Oct 7, 2015 at 8:59 PM, Malithi Edirisinghe <
>>>>>>>> malit...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Sachith,
>>>>>>>>>
>>>>>>>>> Here EndpointUtil.extractCredentialsFromAuthzHeader() method
>>>>>>>>> expects the value of the 'Authorization' header. Please refer [1]. 
>>>>>>>>> Here the
>>>>>>>>> value of the 'Authorization' header is passed to the method which is
>>>>>>>>> directly taken from the servlet request.
>>>>>>>>> And when decoding the header it expects the value to be in
>>>>>>>>> '<authMethod> <base64Hash>' format.
>>>>>>>>>
>>>>>>>>> So actually what's wrong here is the curl you have posted. It
>>>>>>>>> should be like below.
>>>>>>>>>
>>>>>>>>> curl -k -d "grant_type=password&username=admin&password=admin" -H
>>>>>>>>> "Authorization:Basic xxxxxxxxxxxxxx" -H "Content-Type:
>>>>>>>>> application/x-www-form-urlencoded"
>>>>>>>>> https://localhost:9443/oauth2/token
>>>>>>>>>
>>>>>>>>> So this adds the two headers properly.
>>>>>>>>> In your case the value of the 'Authorization' header is 'Basic
>>>>>>>>> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Content-Type:
>>>>>>>>> application/x-www-form-urlencoded' which is not in the expected 
>>>>>>>>> format.
>>>>>>>>> That's why you see the error 'Error decoding authorization header.
>>>>>>>>> Space delimited \"<authMethod> <base64Hash>\" format violated.'
>>>>>>>>>
>>>>>>>>> Further, if you try out the curl command that Pushpalanka has
>>>>>>>>> posted you will note that it works.
>>>>>>>>>
>>>>>>>>> [1]
>>>>>>>>> https://github.com/wso2/carbon-identity/blob/master/components/oauth/org.wso2.carbon.identity.oauth.endpoint/src/main/java/org/wso2/carbon/identity/oauth/endpoint/token/OAuth2TokenEndpoint.java#L86
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Malithi.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Oct 7, 2015 at 5:57 PM, Sachith Punchihewa <
>>>>>>>>> sachi...@wso2.com> wrote:
>>>>>>>>>
>>>>>>>>>> Hi All,
>>>>>>>>>>
>>>>>>>>>> @Pushpalanka I used that then it gives me an error indicating
>>>>>>>>>> "Client Authentication failed".
>>>>>>>>>>
>>>>>>>>>> This issues was not there in the IS 5.0.0. I did a debugging and
>>>>>>>>>> found the issue. I have send a pull request regarding this.
>>>>>>>>>>
>>>>>>>>>> Thanks and Regards.
>>>>>>>>>> Kamidu Sachith Punchihewa
>>>>>>>>>> *Software Engineer*
>>>>>>>>>> WSO2, Inc.
>>>>>>>>>> lean . enterprise . middleware
>>>>>>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Disclaimer: This communication may contain privileged or other
>>>>>>>>>> confidential information and is intended exclusively for the 
>>>>>>>>>> addressee/s.
>>>>>>>>>> If you are not the intended recipient/s, or believe that you may have
>>>>>>>>>> received this communication in error, please reply to the sender 
>>>>>>>>>> indicating
>>>>>>>>>> that fact and delete the copy you received and in addition, you 
>>>>>>>>>> should not
>>>>>>>>>> print, copy, retransmit, disseminate, or otherwise use the 
>>>>>>>>>> information
>>>>>>>>>> contained in this communication. Internet communications cannot be
>>>>>>>>>> guaranteed to be timely, secure, error or virus-free. The sender 
>>>>>>>>>> does not
>>>>>>>>>> accept liability for any errors or omissions.
>>>>>>>>>>
>>>>>>>>>> On Wed, Oct 7, 2015 at 5:47 PM, Pushpalanka Jayawardhana <
>>>>>>>>>> la...@wso2.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> Optionally, can you try with below command format and check,
>>>>>>>>>>>
>>>>>>>>>>> curl --user Client_Id:Client_Secret  -k -d
>>>>>>>>>>> "grant_type=password&username=admin&password=admin" -H
>>>>>>>>>>> "Content-Type:application/x-www-form-urlencoded"
>>>>>>>>>>> https://localhost:9443/oauth2/token
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Pushpalanka.
>>>>>>>>>>> --
>>>>>>>>>>> Pushpalanka Jayawardhana, B.Sc.Eng.(Hons).
>>>>>>>>>>> Senior Software Engineer, WSO2 Lanka (pvt) Ltd;  wso2.com/
>>>>>>>>>>> Mobile: +94779716248
>>>>>>>>>>> Blog: pushpalankajaya.blogspot.com/ | LinkedIn:
>>>>>>>>>>> lk.linkedin.com/in/pushpalanka/ | Twitter: @pushpalanka
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Oct 7, 2015 at 5:40 PM, Sachith Punchihewa <
>>>>>>>>>>> sachi...@wso2.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi,
>>>>>>>>>>>> I am currently using a locally build of IS Server from the
>>>>>>>>>>>> latest code.When i try to get a OAuth Access token via a curl 
>>>>>>>>>>>> execution i
>>>>>>>>>>>> am getting an error.
>>>>>>>>>>>>
>>>>>>>>>>>> Curl Format used :
>>>>>>>>>>>>
>>>>>>>>>>>> *curl**<SPACE>**-k**<SPACE>**-d**<SPACE>*
>>>>>>>>>>>>> *"grant_type=password&username=userNamepasswork&=**passWord*
>>>>>>>>>>>>> *&tenantDomain=carbon.super"**<SPACE>**-H**<SPACE>*
>>>>>>>>>>>>> *"Authorization:Basic**<SPACE>**Base 64 encoded
>>>>>>>>>>>>> clientID:clientSecret,**<SPACE>**Content-Type:**<SPACE>*
>>>>>>>>>>>>> *application/x-www-form-urlencoded"**<SPACE>**https://localhost:9443/oauth2/token
>>>>>>>>>>>>> <https://localhost:9443/oauth2/token>*
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Actual command :
>>>>>>>>>>>>
>>>>>>>>>>>> curl -k -d
>>>>>>>>>>>>> "grant_type=password&username=xxxxx&password=xxxxx&tenantDomain=carbon.super"
>>>>>>>>>>>>> -H "Authorization: Basic 
>>>>>>>>>>>>> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
>>>>>>>>>>>>> Content-Type: application/x-www-form-urlencoded"
>>>>>>>>>>>>> https://localhost:9443/oauth2/token
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Error :
>>>>>>>>>>>>
>>>>>>>>>>>> "Error decoding authorization header. Space delimited
>>>>>>>>>>>>> \"<authMethod> <base64Hash>\" format violated."
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Is there is a issue with the curl command i am using here ?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks and Regards.
>>>>>>>>>>>> Kamidu Sachith Punchihewa
>>>>>>>>>>>> *Software Engineer*
>>>>>>>>>>>> WSO2, Inc.
>>>>>>>>>>>> lean . enterprise . middleware
>>>>>>>>>>>> Mobile : +94 (0) 770566749 <%2B94%20%280%29%20773%20451194>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Disclaimer: This communication may contain privileged or other
>>>>>>>>>>>> confidential information and is intended exclusively for the 
>>>>>>>>>>>> addressee/s.
>>>>>>>>>>>> If you are not the intended recipient/s, or believe that you may 
>>>>>>>>>>>> have
>>>>>>>>>>>> received this communication in error, please reply to the sender 
>>>>>>>>>>>> indicating
>>>>>>>>>>>> that fact and delete the copy you received and in addition, you 
>>>>>>>>>>>> should not
>>>>>>>>>>>> print, copy, retransmit, disseminate, or otherwise use the 
>>>>>>>>>>>> information
>>>>>>>>>>>> contained in this communication. Internet communications cannot be
>>>>>>>>>>>> guaranteed to be timely, secure, error or virus-free. The sender 
>>>>>>>>>>>> does not
>>>>>>>>>>>> accept liability for any errors or omissions.
>>>>>>>>>>>>
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Dev mailing list
>>>>>>>>>>>> Dev@wso2.org
>>>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dev mailing list
>>>>>>>>>> Dev@wso2.org
>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>>
>>>>>>>>> *Malithi Edirisinghe*
>>>>>>>>> Senior Software Engineer
>>>>>>>>> WSO2 Inc.
>>>>>>>>>
>>>>>>>>> Mobile : +94 (0) 718176807
>>>>>>>>> malit...@wso2.com
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Dev mailing list
>>>>>>>> Dev@wso2.org
>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Hasintha Indrajee
>>>>>>> Software Engineer
>>>>>>> WSO2, Inc.
>>>>>>> Mobile:+94 771892453
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>> *Malithi Edirisinghe*
>>>>>> Senior Software Engineer
>>>>>> WSO2 Inc.
>>>>>>
>>>>>> Mobile : +94 (0) 718176807
>>>>>> malit...@wso2.com
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Hasintha Indrajee
>>>>> Software Engineer
>>>>> WSO2, Inc.
>>>>> Mobile:+94 771892453
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> Dev@wso2.org
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Lakmali Baminiwatta
>>> Senior Software Engineer
>>> WSO2, Inc.: http://wso2.com
>>> lean.enterprise.middleware
>>> mobile:  +94 71 2335936
>>> blog : lakmali.com
>>>
>>>
>>
>
>
> --
> Lakmali Baminiwatta
> Senior Software Engineer
> WSO2, Inc.: http://wso2.com
> lean.enterprise.middleware
> mobile:  +94 71 2335936
> blog : lakmali.com
>
>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to