By: Rj .. user 07 Feb 2018 at 1:16 a.m. CST

9 Responses
Rj .. gravatar

Hi We are using SCIM api with play framework and scala for Get, Create, Update user operations and I am using userId as UUID in my services. My service running on docker and I have install gluu-server on aws instance.

My service getting two request and We have seperate code for each request: (1)get user UUID on behalf of user-EmailID. And another is (2) User registration.

(1) Here is my scala code to get user UUID:-

import gluu.scim2.client.factory.ScimClientFactory
import org.gluu.oxtrust.model.scim2.User
import javax.ws.rs.core.MediaType
import java.util.{Properties, UUID}
import com.typesafe.config.ConfigFactory
import gluu.scim2.client.ScimClient
import play.api.Logger
 class TestScimClient {
 val config = ConfigFactory.load()
 val op_host=config.getString("op_host")
 val logger = Logger(this.getClass)
 val domainURL: String = op_host+"/identity/restv1"
 val OIDCMetadataUrl: String = op_host+"/.well-known/openid-configuration"
 logger.debug("***** domainURL *****"+domainURL)
 logger.debug("***** OIDCMetadataUrl *****"+OIDCMetadataUrl)
 var client: ScimClient = null
 def initialiseScimClient(): Unit =
 {
 try
 {
    client = ScimClientFactory.getTestClient(domainURL, OIDCMetadataUrl);
    logger.debug("****** client object created ****** "+client)
 }
 catch
 {
  case e: Exception =>
    logger.debug("***** Got hit for initializing scimClient. *****")
  }
 }

     //-------getUUID-------
   @throws[Exception]
   def getUUID(emailID: String): String = {
   if(client == null)
    {
     initialiseScimClient()
     getUUID(emailID)
   }
    var customerUIID: String = searchUUID(emailID)
   if (customerUIID == "")
   {
     var username: String=""
     username=UUID.randomUUID().toString
     logger.debug("******** USER_NAME **********"+ username)
     val email1: String = emailID
     val email2: String = "ebc" + "@" + username
     var userDetails = "{ \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"],    \"externalId\": \"07\",    \"userName\": \"" + 
     username + "\",    \"name\": { \"givenName\": \"Singh61\", \"familyName\": \"json500\", \"middleName\": \"N/A\", \"honorificPrefix\": 
    \"\", \"honorificSuffix\": \"\"},  \"displayName\": \"" + username + "\",   \"nickName\": \" \",   \"profileUrl\": 
    \"http://www.gluu.org/\", \"emails\": [   {\"value\": \"" + email1 + "\", \"type\": \"work\", \"primary\": \"true\"},  {\"value\": \"" + 
    email2 + "\", \"type\": \"home\", \"primary\": \"false\"} ],    \"addresses\": [{\"type\": \"work\", \"streetAddress\": \"622 East 6th 
    Street Suite 200\", \"locality\": \"Austin2\", \"region\": \"TX\", \"postalCode\": \"78701\", \"country\": \"US\", \"formatted\": \"621 
    East 6th Street Suite 200  Austin , TX 78701 US\", \"primary\": \"true\"}],   \"phoneNumbers\": [{\"value\": \"246-345-2342\", \"type\": 
    \"work\"}],  \"ims\": [{\"value\": \"test_user2\", \"type\": \"Skype2\"}], \"userType\": \"MD2\",    \"title\": \"MD2\",   
    \"preferredLanguage\": \"en-us\", \"locale\": \"en_US\",    \"active\": \"true\", \"password\": \"secret2\", \"roles\": [{\"value\": 
    \"Owner2\"}],    \"entitlements\": [{\"value\": \"full access\"}],   \"x509Certificates\": [{\"value\": \"cert-15\"}] }"
      createUUID(userDetails)
      logger.debug("******* New Customer UUID Created *****")
      customerUIID = searchUUID(emailID)
      }
       logger.debug("UUID:=> " + customerUIID)
     return customerUIID
     }
        //---------Create Customer UUID---------
     @throws[Exception]
     def createUUID(userDetails: Any): Unit = {
     try {
     val p = new Properties
     p.setProperty("json_string", userDetails.toString)
     client.createPersonString(p.getProperty("json_string"), MediaType.APPLICATION_JSON)
     } catch {
      case w: Exception =>
       System.out.println(w.getLocalizedMessage)
       w.printStackTrace()
     }
    }

    //------searchUUID---->

   @throws[Exception]
   def searchUUID(emailID: String): String = {
    logger.debug("********Search EMAIL_ID **********"+ emailID)
    var output: String = ""
    val filter = "emails.value eq \"" + emailID + "\""
    val response = client.searchUsers(filter, 1, 1, "", "", null)
    val results = response.getEntity.getResources
    if (results.size > 0) {
    val admin = results.get(0).asInstanceOf[User]
    output = admin.getId
   }
    return output
  }

Here is the log/output when I request for UUID which I need:

[2018-02-07 05:48:29,351] [debug] from controllers.HomeController in application-akka.actor.default-dispatcher-4 - *** Got request to read User Email ID ** Time = 2018-02-07 05:48:29.351 [2018-02-07 05:48:29,352] [debug] from controllers.HomeController in application-akka.actor.default-dispatcher-4 - **In Home Controller CustomerEmail** : abc@ebc.com [2018-02-07 05:48:29,352] [debug] from entity.TestScimClient in application-akka.actor.default-dispatcher-22 - * domainURL https://domainName/identity/restv1 [2018-02-07 05:48:29,352] [debug] from entity.TestScimClient in application-akka.actor.default-dispatcher-22 - OIDCMetadataUrl *https://domainName/.well-known/openid-configuration [2018-02-07 05:48:29,352] [debug] from actor.UuidActor in application-akka.actor.default-dispatcher-22 - * GOT HTTP HIT IN UUID_Actor 2018-02-07 05:48:29,352 INFO [org.xdi.oxauth.model.util.JwtUtil] Bouncy Castle Provider was added already 2018-02-07 05:48:29,353 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimContextResolver is already registered. 2nd registration is being ignored. 2018-02-07 05:48:29,353 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimProvider is already registered. 2nd registration is being ignored. [2018-02-07 05:48:29,375] [debug] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-22 - sun.net.www.MessageHeader@e080e015 pairs: {GET /.well-known/openid-configuration HTTP/1.1: null}{User-Agent: Java/1.8.0_111}{Host: domainName}{Accept: text/html, image/gif, image/jpeg, ; q=.2, /; q=.2}{Connection: keep-alive} [2018-02-07 05:48:29,403] [debug] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-22 - sun.net.www.MessageHeader@510b00ff10 pairs: {null: HTTP/1.1 200 OK}{Date: Wed, 07 Feb 2018 05:48:29 GMT}{Server: Jetty(9.3.15.v20161220)}{X-Xss-Protection: 1; mode=block}{X-Content-Type-Options: nosniff}{Strict-Transport-Security: max-age=31536000; includeSubDomains}{Content-Type: application/json}{Keep-Alive: timeout=5, max=100}{Connection: Keep-Alive}{Transfer-Encoding: chunked} tokens: 667ac0f2-8a69-4c70-9ceb-177b67d5b856 [2018-02-07 05:48:29,479] [debug] from entity.TestScimClient in application-akka.actor.default-dispatcher-22 - * client object created gluu.scim2.client.TestModeScimClient@383711e3 [2018-02-07 05:48:29,480] [debug] from entity.TestScimClient in application-akka.actor.default-dispatcher-22 - *Search EMAIL_ID ** abc@ebc.com [2018-02-07 05:48:29,619] [debug] from entity.TestScimClient in application-akka.actor.default-dispatcher-22 - UUID:=> @!FE21.A802.2F28.155C!0001!FDAB.AC64!0000!C355.5A50.A2BF.A8E0 [2018-02-07 05:48:29,707] [debug] from controllers.HomeController in application-akka.actor.default-dispatcher-4 - * response Time***** 2018-02-07 05:48:29.707

(2)User registration:

   import java.util.{Properties, UUID}
   import javax.ws.rs.core.MediaType 
   import com.typesafe.config.ConfigFactory
   import gluu.scim2.client.ScimClient
   import gluu.scim2.client.factory.ScimClientFactory
   import org.gluu.oxtrust.model.scim2.User
    class RegisterUser {
     val config = ConfigFactory.load()
     val opHost = config.getString("gluu.op_host")
     var flag = 0;
          // this flag is used because we use recusion for initializeScimclient fns
     val domainURL2: String = opHost + "/identity/restv1"
     val OIDCMetadataUrl2: String = opHost + "/.well-known/openid-configuration"
     var client: ScimClient = null

     def initialiseScimClient(): Unit = {
      try {
        client = ScimClientFactory.getTestClient(domainURL2, OIDCMetadataUrl2);
       println("clientOBJECT==>" + client)
        }
      catch {
       case e: Exception =>
       println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + " " + e.getLocalizedMessage)
        }
     }

    var status = ""
    @throws[Exception]
     def newUser(userName: String, firstName: String, lastName: String, emailId: String, password: String): String = {
       if (client == null) {
         initialiseScimClient()
        newUser(userName, firstName, lastName, emailId, password)
      }
         var verification1: String = verifyUserName(userName)
       var verification2: String = verifyEmail(emailId)
          if (verification1 == "" && verification2 == "") {
          println("<<<<<<<<<<<<<<<Enter in new creation>>>>>>>>>>>>>>>>>>>>>>")
          val userDetails = "{ \"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"], \"userName\": \"" + userName + "\",    
        \"name\": { \"givenName\": \"" + firstName + "\", \"familyName\": \"" + lastName + "\", \"middleName\": \"N/A\", 
       \"honorificPrefix\": \"\", \"honorificSuffix\": \"\"},  \"displayName\": \"" + userName + "\",    \"emails\": [   {\"value\": \"" + 
        emailId + "\", \"type\": \"Personal\", \"primary\": \"true\"} ],     \"role \": \"user\",  \"active\": \"true\", \"password\": \"" + 
   password + "\",  \"roles\": [{\"value\": \"user\"}] , \"x509Certificates\": [{\"value\": \"cert-15\"}] }"

    createNewUser(userDetails)
      status = searchUUID(userName)
          flag = 1
        }
       else if (flag == 0) {
        status = verification1 + verification2
        }
       status
          }


          //  CreateCustomer---->
       @throws[Exception]
    def createNewUser(dt: Any): Unit = {
      try {
       val p = new Properties
       p.setProperty("json_string", dt.toString)
       client.createPersonString(p.getProperty("json_string"), MediaType.APPLICATION_JSON)
      } catch {
     case w: Exception =>
      System.out.println(w.getLocalizedMessage)
      w.printStackTrace()
      }
    }



     @throws[Exception]
  def searchUUID(userName: String): String = {
  var output: String = ""
  val filter = "userName eq \"" + userName + "\""
  val response = client.searchUsers(filter, 1, 1, "", "", null)
  val results = response.getEntity.getResources
  if (results.size > 0) {
   val resp = results.get(0).asInstanceOf[User]
   output = resp.getId
   }
   return output
  }


      def verifyUserName(userName: String): String = {
       var output: String = ""
      val filter = "userName eq \"" + userName + "\""
       val response = client.searchUsers(filter, 1, 1, "", "", null)
       val results = response.getEntity.getResources
       if (results.size > 0) {
        val resp = results.get(0).asInstanceOf[User]
       output = resp.getId
         if (output != "") {
        output = "*** userName already exist ***"
      }
     }
     return output
   }


    def verifyEmail(emailId: String): String = {
     var output: String = ""
     val filter = "emails.value eq \"" + emailId + "\""
     val response = client.searchUsers(filter, 1, 1, "", "", null)
    val results = response.getEntity.getResources
    if (results.size > 0) {
      val resp = results.get(0).asInstanceOf[User]
      output = resp.getId.toString
      if (output != "") {
      output = "email already exist ***"
     }
   }
  return output
 }

}

Here is the log of user registration request :

reqest>>>>{"userName":"heldfss2","firstName":"sa","lastName":"da","emailId":"spineor@gmail.com","password":"12"}[2018-02-07 05:14:53,402] [debug] from controllers.HomeController in application-akka.actor.default-dispatcher-4 - ** registerNewUser **** [2018-02-07 05:14:53,403] [debug] from controllers.HomeController in application-akka.actor.default-dispatcher-4 - register user request newUserRequest(heldfss2,sa,da,spineor@gmail.com,12) 2018-02-07 05:14:53,403 INFO [org.xdi.oxauth.model.util.JwtUtil] Bouncy Castle Provider was added already 2018-02-07 05:14:53,403 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimContextResolver is already registered. 2nd registration is being ignored. 2018-02-07 05:14:53,403 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimProvider is already registered. 2nd registration is being ignored. [2018-02-07 05:14:53,419] [debug] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-4 - sun.net.www.MessageHeader@371623405 pairs: {GET /.well-known/openid-configuration HTTP/1.1: null}{User-Agent: Java/1.8.0_111}{Host: DomainName}{Accept: text/html, image/gif, image/jpeg, ; q=.2, /*; q=.2}{Connection: keep-alive} [2018-02-07 05:14:53,430] [debug] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-4 - sun.net.www.MessageHeader@1451a5410 pairs: {null: HTTP/1.1 200 OK}{Date: Wed, 07 Feb 2018 05:14:53 GMT}{Server: Jetty(9.3.15.v20161220)}{X-Xss-Protection: 1; mode=block}{X-Content-Type-Options: nosniff}{Strict-Transport-Security: max-age=31536000; includeSubDomains}{Content-Type: application/json}{Keep-Alive: timeout=5, max=100}{Connection: Keep-Alive}{Transfer-Encoding: chunked} tokens: 8e25d56e-4610-4154-851d-ba01d6923d87 clientOBJECT==>gluu.scim2.client.TestModeScimClient@2113d6aa

But some time we are getting an issue when request for user-registration or request usser_UUID:

reqest>>>>{"userName":"hel","firstName":"sa","lastName":"da","emailId":"far@gmail.com","password":"12"}new user paramshel--12 [2018-02-06 04:30:11,593] [#[36mdebug#[0m] from controllers.HomeController in application-akka.actor.default-dispatcher-3 - register user request newUserRequest(hel,sa,da,far@gmail.com,12) 2018-02-06 04:30:11,594 INFO [org.xdi.oxauth.model.util.JwtUtil] Bouncy Castle Provider was added already 2018-02-06 04:30:11,595 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimContextResolver is already registered. 2nd registration is being ignored. 2018-02-06 04:30:11,595 WARN [org.jboss.resteasy.spi.ResteasyProviderFactory] Provider class gluu.scim2.client.jackson.ScimProvider is already registered. 2nd registration is being ignored. [2018-02-06 04:30:11,663] [#[36mdebug#[0m] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-3 - sun.net.www.MessageHeader@3019fff25 pairs: {GET /.well-known/openid-configuration HTTP/1.1: null}{User-Agent: Java/1.8.0_111}{Host: DomainName}{Accept: text/html, image/gif, image/jpeg, ; q=.2, /*; q=.2}{Connection: keep-alive} [2018-02-06 04:30:11,681] [#[36mdebug#[0m] from sun.net.www.protocol.http.HttpURLConnection in application-akka.actor.default-dispatcher-3 - sun.net.www.MessageHeader@6ba3b13310 pairs: {null: HTTP/1.1 200 OK}{Date: Tue, 06 Feb 2018 04:30:11 GMT}{Server: Jetty(9.3.15.v20161220)}{X-Xss-Protection: 1; mode=block}{X-Content-Type-Options: nosniff}{Strict-Transport-Security: max-age=31536000; includeSubDomains}{Content-Type: application/json}{Keep-Alive: timeout=5, max=100}{Connection: Keep-Alive}{Transfer-Encoding: chunked} tokens: null clientOBJECT==>gluu.scim2.client.TestModeScimClient@6a2fa01c [2018-02-06 04:30:12,025] [#[31merror#[0m] from application in application-akka.actor.default-dispatcher-3 -

! @76pflm11p - Internal server error, for (POST) [/registerNewUser] ->

play.api.UnexpectedException: Unexpected exception[ReaderException: java.io.IOException: Stream closed] at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:289) at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:220) at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160) at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188) at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100) at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346) at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:36) at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70) at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:44) at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:252) at scala.concurrent.Promise$class.complete(Promise.scala:55) at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:157) at scala.concurrent.Promise$class.failure(Promise.scala:104) at scala.concurrent.impl.Promise$DefaultPromise.failure(Promise.scala:157) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:257) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:36) at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:91) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) at akka.dispatch.BatchingExecutor$BlockableBatch$$anonfun$run$1.apply(BatchingExecutor.scala:91) at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:72) at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:90) at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:39) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:415) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) Caused by: org.jboss.resteasy.spi.ReaderException: java.io.IOException: Stream closed at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:477) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:390) at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:347) at Model.RegisterUser.verifyUserName(RegisterUser.scala:101) at Model.RegisterUser.newUser(RegisterUser.scala:47) at Model.RegisterUser.newUser(RegisterUser.scala:44) at controllers.HomeController$$anonfun$registerNewUser$1.apply(HomeController.scala:122) at controllers.HomeController$$anonfun$registerNewUser$1.apply(HomeController.scala:110) at play.api.mvc.ActionBuilder$$anonfun$apply$13.apply(Action.scala:371) at play.api.mvc.ActionBuilder$$anonfun$apply$13.apply(Action.scala:370) at play.api.mvc.Action$.invokeBlock(Action.scala:498) at play.api.mvc.Action$.invokeBlock(Action.scala:495) at play.api.mvc.ActionBuilder$$anon$2.apply(Action.scala:458) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112) at play.utils.Threads$.withContextClassLoader(Threads.scala:21) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111) at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:110) at scala.Option.map(Option.scala:146) at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110) at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253) ... 14 common frames omitted Caused by: java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:170) at java.io.BufferedInputStream.read(BufferedInputStream.java:336) at org.jboss.resteasy.client.core.SelfExpandingBufferredInputStream.read(SelfExpandingBufferredInputStream.java:57) at org.codehaus.jackson.impl.ByteSourceBootstrapper.ensureLoaded(ByteSourceBootstrapper.java:507) at org.codehaus.jackson.impl.ByteSourceBootstrapper.detectEncoding(ByteSourceBootstrapper.java:129) at org.codehaus.jackson.impl.ByteSourceBootstrapper.constructParser(ByteSourceBootstrapper.java:224) at org.codehaus.jackson.JsonFactory._createJsonParser(JsonFactory.java:785) at org.codehaus.jackson.JsonFactory.createJsonParser(JsonFactory.java:561) at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:414) at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:59) at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:51) at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59) at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53) at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:440) ... 35 common frames omitted

After this issue on any request (uuid request or user registration) getting same issue till service not restart.

Please suggest what I do to fix this issue.

Thanks!!

By Thomas Gasmyr Mougang staff 07 Feb 2018 at 1:25 a.m. CST

Thomas Gasmyr Mougang gravatar

Hi Rj,

Please provide your code as attachment. Posting code in ticket description is not good at all.

Thanks!

By Rj .. user 07 Feb 2018 at 1:54 a.m. CST

Rj .. gravatar

Hi Thomas Gasmyr Mougang, Thanks for quick reply. I am unable to find any attachment option here.

Thanks!

By Thomas Gasmyr Mougang staff 07 Feb 2018 at 2:04 a.m. CST

Thomas Gasmyr Mougang gravatar

Really?

Please check this screenshot.

By Rj .. user 07 Feb 2018 at 4:52 a.m. CST

Rj .. gravatar

But here is not showing any attachment option:

https://pasteboard.co/H6wxner.png

By Thomas Gasmyr Mougang staff 07 Feb 2018 at 5:05 a.m. CST

Thomas Gasmyr Mougang gravatar

Rj,

It seems to me that you confused link(the one you provide in your last post).

There are many ways to share files.

You can upload them in google doc, share them and paste the link here.

By Rj .. user 07 Feb 2018 at 6:24 a.m. CST

Rj .. gravatar

Please have a look

this link

By William Lowe staff 07 Feb 2018 at 8:52 a.m. CST

William Lowe gravatar

This looks like a private file.. please share it publicly.

By Rj .. user 07 Feb 2018 at 10:13 a.m. CST

Rj .. gravatar

Hi William,

Please check now

doc link

By Thomas Gasmyr Mougang staff 16 Feb 2018 at 2:37 a.m. CST

Thomas Gasmyr Mougang gravatar

Hi RJ,

How it is going? Have you found a fix for your issue or do you still need assistance?

Here are observations:
1. The error is clear.
2. The error occurs when the token is null.

Suggestion:

Make sure the token is not null.

Please note, We are unable to troubleshoot & debug code for community support. If you are interested in further assistance, check our VIP support packages for more information.

Hope the suggestion will help you.

Thanks!