I have built my ATLAS dataset (OMOP CDM dataset) and run Achilles on it. The tables are stored in BigQuery.
I then built WebAPI from Broadsea on my local machine with the following changes but got an error when trying to make GET requests to the CDM or Achilles tables.
Steps to Setup WebAPI on Local Machine
Changes to files and specific commands are described in the Appendix section. The WebAPI request and error message are described in the WebAPI Request section.
- Clone WebAPI to local.
- Download the BigQuery drivers using the
DatabaseConnector library using the steps explained here to src/main/extras/bigquery directory of my local copy of WebAPI. I copied to this directory because of the BigQuery JDBC driver path specified in pom.xml.
- Clone Broadsea to local.
- Edit
ohdsi-webapi.yml to mount the service account key file used to authenticate to BigQuery in the JDBC string.
- The Broadsea image is built with default profile, and the WebAPI image is built from the local copy.
- CDM connections are set up using these instructions. The JDBC string I use was already tested previously to run Achilles, and it worked.
Appendix
Step 4:
.env
WEBAPI_BIGQUERY_KEYFILE=${PATH_TO_SERVICE_ACCOUNT_KEY_FILE}
WEBAPI_ADDITIONAL_JDBC_FILE_PATH=${PATH_TO_DOWNLOADED_BIGQUERY_JDBC_FILE} # File: GoogleBigQueryJDBC42.jar
compose/ohdsi-webapi.yml
services:
ohdsi-webapi:
...
volumes:
- ${WEBAPI_BIGQUERY_KEYFILE}:/var/lib/ohdsi/webapi/config/bigquery_keyfile.json
Step 5:
$ cd Broadsea
$ docker compose --profile default up -d
$ docker compose --profile webapi-from-git up -d
Step 6:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId={projectId};OAuthType=0;OAuthPvtKeyPath={keyFileName};OAuthServiceAcctEmail={serviceAccountEmail};EnableSession=1;
WebAPI Request
I make an API request to the data density report and get the following result.
API request:
$ curl https://127.0.0.1/WebAPI/cdmresults/MY_CDM/datadensity/
Returned payload:
{
"payload": {
"cause": null,
"stackTrace": [],
"message": "An exception occurred: java.lang.NoClassDefFoundError",
"localizedMessage": "An exception occurred: java.lang.NoClassDefFoundError",
"suppressed": []
},
"headers": {
"id": "352e95df-5d24-a2d4-ff59-876150a90e77",
"timestamp": 1775348505095
}
}
Error:
There is a file called google-auth-library-credentials-1.28.0.jar that was downloaded and copied to local WebAPI directory in step 2 before building the image in step 5.
2026-04-05 00:21:42.692 ERROR http-nio-8080-exec-3 org.ohdsi.webapi.util.GenericExceptionMapper - [] - java.lang.NoClassDefFoundError: com/google/auth/Credentials
at com.simba.googlebigquery.googlebigquery.core.BQConnection.connect(Unknown Source)
at com.simba.googlebigquery.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
at com.simba.googlebigquery.jdbc.common.AbstractDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:208)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:196)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:159)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:624)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:720)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:770)
at org.ohdsi.webapi.report.CDMResultsAnalysisRunner.getDataDensityResults(CDMResultsAnalysisRunner.java:127)
at org.ohdsi.webapi.service.CDMResultsService.getRawDataDesity(CDMResultsService.java:341)
at org.ohdsi.webapi.service.CDMResultsService.getDataDensity(CDMResultsService.java:336)
at org.ohdsi.webapi.service.CDMResultsService$$FastClassBySpringCGLIB$$f65c71c1.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:84)
at org.ohdsi.webapi.achilles.aspect.AchillesCacheAspect.cache(AchillesCacheAspect.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
Dependencies
> sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS 26.3.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: America/Chicago
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] Achilles_1.7.2 DatabaseConnector_7.1.0
loaded via a namespace (and not attached):
[1] R6_2.6.1 tidyselect_1.2.1 bit_4.6.0
[4] ParallelLogger_3.5.1 magrittr_2.0.3 glue_1.8.0
[7] tibble_3.2.1 pkgconfig_2.0.3 rJava_1.0-11
[10] bit64_4.6.0-1 dplyr_1.1.4 generics_0.1.3
[13] lifecycle_1.0.4 cli_3.6.4 vctrs_0.6.5
[16] DBI_1.3.0 data.table_1.18.2.1 compiler_4.4.2
[19] rstudioapi_0.17.1 pillar_1.10.1 rlang_1.1.5
[22] SqlRender_1.19.4 dbplyr_2.5.1
I have built my ATLAS dataset (OMOP CDM dataset) and run Achilles on it. The tables are stored in BigQuery.
I then built WebAPI from Broadsea on my local machine with the following changes but got an error when trying to make GET requests to the CDM or Achilles tables.
Steps to Setup WebAPI on Local Machine
Changes to files and specific commands are described in the Appendix section. The WebAPI request and error message are described in the WebAPI Request section.
DatabaseConnectorlibrary using the steps explained here tosrc/main/extras/bigquerydirectory of my local copy of WebAPI. I copied to this directory because of the BigQuery JDBC driver path specified inpom.xml.ohdsi-webapi.ymlto mount the service account key file used to authenticate to BigQuery in the JDBC string.Appendix
Step 4:
.envcompose/ohdsi-webapi.ymlStep 5:
Step 6:
WebAPI Request
I make an API request to the data density report and get the following result.
API request:
Returned payload:
Error:
There is a file called
google-auth-library-credentials-1.28.0.jarthat was downloaded and copied to local WebAPI directory in step 2 before building the image in step 5.Dependencies