Stream: troubleshooting

Topic: โœ” external tool timeout config


view this post on Zulip nana (Dec 10 2024 at 19:05):

Hi @Philip Durbin ๐Ÿ‰ ! I also have some errors running the docker version following the developer guide. Do you mind if I send the information here or would you rather I create a new topic?

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:06):

@nana I moved us to a new topic. How can I help? :big_smile:

view this post on Zulip nana (Dec 10 2024 at 19:10):

Thank you! So I can create a local version of Dataverse, sign in and create a dataset. But once I attempt to access a file using the external tool (Data Explorer in our case) I get this error in the console:
image.png

view this post on Zulip nana (Dec 10 2024 at 19:10):

Another dev in our team is experiencing the same problem

view this post on Zulip nana (Dec 10 2024 at 19:10):

[#|2024-12-10T19:08:51.068+0000|SEVERE|Payara 6.2024.6|edu.harvard.iq.dataverse.api.errorhandlers.ThrowableHandler|_ThreadID=3121;_ThreadName=http-thread-pool::http-listener-1(8);_TimeMillis=1733857731068;_LevelValue=1000;|
dev_dataverse>   _status="ERROR";_code=500;_message="Internal server error. More details available at the server logs.";_incidentId="dfa7979b-6f18-4ab3-977f-086c9c7ee8dd";_interalError="NullPointerException";_requestUrl="http://localhost:8080/api/v1/files/5/metadata/2/toolparams/2?until=2024-12-10T19:13:50.861&user=dataverseAdmin&method=GET&token=a4728da09c9e44f873bfd3df5ecf0aaf73b6f5b83edbb981bc8bcb5a193eb8bc99378b50514f03da0cd91b95b7986c39ede737683a27d7945864f5c059f1a357";_requestMethod="GET"||#]
dev_dataverse>
dev_dataverse> [#|2024-12-10T19:08:51.069+0000|SEVERE|Payara 6.2024.6|edu.harvard.iq.dataverse.api.errorhandlers.ThrowableHandler|_ThreadID=3121;_ThreadName=http-thread-pool::http-listener-1(8);_TimeMillis=1733857731069;_LevelValue=1000;|
dev_dataverse>   java.lang.NullPointerException: Cannot invoke "jakarta.json.JsonNumber.intValue()" because the return value of "org.eclipse.parsson.JsonObjectBuilderImpl$JsonObjectImpl.getJsonNumber(String)" is null

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:12):

Which line of the Dataverse code is throwing that error? We probably need to look more of the output.

view this post on Zulip nana (Dec 10 2024 at 19:14):

I think this is the full error:

[#|2024-12-10T19:08:51.068+0000|SEVERE|Payara 6.2024.6|edu.harvard.iq.dataverse.api.errorhandlers.ThrowableHandler|_ThreadID=3121;_ThreadName=http-thread-pool::http-listener-1(8);_TimeMillis=1733857731068;_LevelValue=1000;|
dev_dataverse>   _status="ERROR";_code=500;_message="Internal server error. More details available at the server logs.";_incidentId="dfa7979b-6f18-4ab3-977f-086c9c7ee8dd";_interalError="NullPointerException";_requestUrl="http://localhost:8080/api/v1/files/5/metadata/2/toolparams/2?until=2024-12-10T19:13:50.861&user=dataverseAdmin&method=GET&token=a4728da09c9e44f873bfd3df5ecf0aaf73b6f5b83edbb981bc8bcb5a193eb8bc99378b50514f03da0cd91b95b7986c39ede737683a27d7945864f5c059f1a357";_requestMethod="GET"||#]
dev_dataverse>
dev_dataverse> [#|2024-12-10T19:08:51.069+0000|SEVERE|Payara 6.2024.6|edu.harvard.iq.dataverse.api.errorhandlers.ThrowableHandler|_ThreadID=3121;_ThreadName=http-thread-pool::http-listener-1(8);_TimeMillis=1733857731069;_LevelValue=1000;|
dev_dataverse>   java.lang.NullPointerException: Cannot invoke "jakarta.json.JsonNumber.intValue()" because the return value of "org.eclipse.parsson.JsonObjectBuilderImpl$JsonObjectImpl.getJsonNumber(String)" is null
dev_dataverse>  at org.eclipse.parsson.JsonObjectBuilderImpl$JsonObjectImpl.getInt(JsonObjectBuilderImpl.java:264)
dev_dataverse>  at edu.harvard.iq.dataverse.util.URLTokenUtil.lambda$createPostBody$0(URLTokenUtil.java:220)
dev_dataverse>  at java.base/java.util.ArrayList.forEach(Unknown Source)
dev_dataverse>  at java.base/java.util.Collections$UnmodifiableCollection.forEach(Unknown Source)
dev_dataverse>  at edu.harvard.iq.dataverse.util.URLTokenUtil.createPostBody(URLTokenUtil.java:216)
dev_dataverse>  at edu.harvard.iq.dataverse.api.Files.getExternalToolFMParams(Files.java:845)
dev_dataverse>  at edu.harvard.iq.dataverse.api.Files$Proxy$_$$_WeldSubclass.getExternalToolFMParams(Unknown Source)
dev_dataverse>  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
dev_dataverse>  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
dev_dataverse>  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
dev_dataverse>  at java.base/java.lang.reflect.Method.invoke(Unknown Source)
dev_dataverse>  at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
dev_dataverse>  at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)
dev_dataverse>  at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)
dev_dataverse>  at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
dev_dataverse>  at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)
dev_dataverse>  at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)
dev_dataverse>  at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)
dev_dataverse>  at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)
dev_dataverse>  at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:261)
dev_dataverse>  at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
dev_dataverse>  at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
dev_dataverse>  at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
dev_dataverse>  at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
dev_dataverse>  at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
dev_dataverse>  at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
dev_dataverse>  at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:240)
dev_dataverse>  at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:697)
dev_dataverse>  at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
dev_dataverse>  at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
dev_dataverse>  at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:357)
dev_dataverse>  at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)
dev_dataverse>  at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
dev_dataverse>  at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1554)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:331)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
dev_dataverse>  at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:83)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
dev_dataverse>  at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:226)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
dev_dataverse>  at edu.harvard.iq.dataverse.api.ApiBlockingFilter.doFilter(ApiBlockingFilter.java:170)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
dev_dataverse>  at edu.harvard.iq.dataverse.api.ApiRouter.doFilter(ApiRouter.java:31)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253)
dev_dataverse>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
dev_dataverse>  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257)
dev_dataverse>  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:166)
dev_dataverse>  at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757)
dev_dataverse>  at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577)
dev_dataverse>  at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
dev_dataverse>  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
dev_dataverse>  at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:372)
dev_dataverse>  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:239)
dev_dataverse>  at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
dev_dataverse>  at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
dev_dataverse>  at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:174)
dev_dataverse>  at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:153)
dev_dataverse>  at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:196)
dev_dataverse>  at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:88)
dev_dataverse>  at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:246)
dev_dataverse>  at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:178)
dev_dataverse>  at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:118)
dev_dataverse>  at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:96)
dev_dataverse>  at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:51)
dev_dataverse>  at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:510)
dev_dataverse>  at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:82)
dev_dataverse>  at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:83)
dev_dataverse>  at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:101)
dev_dataverse>  at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:535)
dev_dataverse>  at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:515)
dev_dataverse>  at java.base/java.lang.Thread.run(Unknown Source)

view this post on Zulip nana (Dec 10 2024 at 19:15):

Does that help at all?

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:15):

definitely

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:15):

edu.harvard.iq.dataverse.util.URLTokenUtil.createPostBody(URLTokenUtil.java:216)

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:16):

which commit are you on?

view this post on Zulip nana (Dec 10 2024 at 19:16):

The latest

view this post on Zulip nana (Dec 10 2024 at 19:16):

Well actually one second

view this post on Zulip nana (Dec 10 2024 at 19:16):

Let me double check that haha

view this post on Zulip nana (Dec 10 2024 at 19:19):

I'm on this commit: https://github.com/IQSS/dataverse/commit/82dad99d4eefbb194519fdadcfc630ff05b6e1b9

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:20):

Ok, so the error is being thrown here: https://github.com/IQSS/dataverse/blob/82dad99d4eefbb194519fdadcfc630ff05b6e1b9/src/main/java/edu/harvard/iq/dataverse/util/URLTokenUtil.java#L216

view this post on Zulip nana (Dec 10 2024 at 19:22):

I see... This is the manifest I use to register the app, is there anything I should change?
configure:

{
  "displayName": "Data Explorer",
  "description": "Odesi Data Explorer for viewing, configuring and editing variables",
  "scope": "file",
  "type": "configure",
  "contentType": "text/tab-separated-values",
  "toolUrl": "http://localhost:4200/",
  "toolParameters": {
    "queryParameters": [
      {
        "fileId": "{fileId}"
      },
      {
        "fileMetadataId": "{fileMetadataId}"
      },
      {
        "datasetPid": "{datasetPid}"
      },
      {
        "dvLocale": "{localeCode}"
      }
    ]
  },
  "allowedApiCalls": [
    {
      "name": "retrieveDataFileDDI",
      "httpMethod": "GET",
      "urlTemplate": "/api/v1/access/datafile/{fileId}/metadata/ddi",
      "timeOut": 270
    },
    {
      "name": "retrieveDataFile",
      "httpMethod": "GET",
      "urlTemplate": "/api/v1/access/datafile/{fileId}"
    },
    {
      "name": "uploadDataFile",
      "httpMethod": "PUT",
      "urlTemplate": "/api/v1/edit/{fileId}"
    }
  ]
}

explore:

{
  "displayName": "Data Explorer",
  "description": "Odesi Data Explorer for viewing, and configuring variables",
  "scope": "file",
  "type": "explore",
  "contentType": "text/tab-separated-values",
  "toolUrl": "http://localhost:4200",
  "toolParameters": {
    "queryParameters": [
      {
        "fileId": "{fileId}"
      },
      {
        "fileMetadataId": "{fileMetadataId}"
      },
      {
        "datasetPid": "{datasetPid}"
      },
      {
        "dvLocale": "{localeCode}"
      }
    ]
  },
  "allowedApiCalls": [
    {
      "name": "retrieveDataFile",
      "httpMethod": "GET",
      "urlTemplate": "/api/v1/access/datafile/{fileId}"
    },
    {
      "name": "retrieveDataFileDDI",
      "httpMethod": "GET",
      "urlTemplate": "/api/v1/access/datafile/{fileId}/metadata/ddi",
      "timeOut": 270
    }
  ]
}

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:24):

Some of your allowedApiCalls don't have a timeOut.

Could that be the problem?

I suspect this might be the line that's giving you trouble:

int timeout = apiObj.getInt(TIMEOUT);

view this post on Zulip nana (Dec 10 2024 at 19:25):

I can try changing that, can i set it to -1 for unlimited time or should all urls have a limit?

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:26):

buh, I'm not sure

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:27):

"For non-public datasets and datafiles, how many minutes the signed URLs given to the tool should be valid for. Must be an integer." https://guides.dataverse.org/en/6.4/api/external-tools.html

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:27):

Please feel free to open an issue to clarify the docs.

view this post on Zulip Philip Durbin ๐Ÿš€ (Dec 10 2024 at 19:29):

Judging from the code, -1 is not supported. I guess you could open a separate issue for that, if you want it.

view this post on Zulip nana (Dec 10 2024 at 20:13):

Okay I will. Thanks, Philip!

view this post on Zulip Notification Bot (Jul 14 2025 at 15:23):

nana has marked this topic as resolved.


Last updated: Oct 30 2025 at 06:21 UTC