ERROR: INVALID DSPACE REST API! Response is not valid JSON!

1,015 views
Skip to first unread message

Diego Torres

unread,
May 25, 2022, 7:35:35 AM5/25/22
to DSpace Technical Support
Hi, so ive installed DSpace 7.2 behind nginx 

#NGINX CONFIG
...
server {
    listen 443 ssl;
    server_name repositorio.emgs.mx;
    ssl_certificate           /etc/nginx/ssl/emgs.cer;
    ssl_certificate_key       /etc/nginx/ssl/emgs.key;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    location /server {
      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_pass          http://repositorio.emgs.mx:8080/server;
      proxy_redirect      http://repositorio.emgs.mx:8080/server https://repositorio.emgs.mx/server;
    }

    location / {
      proxy_pass          http://repositorio.emgs.mx:4000;
      proxy_read_timeout  90;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_redirect      http://repositorio.emgs.mx:4000 https://repositorio.emgs.mx;
    }
  }

#BACKEND local.cfg


#FRONTEND config.prod.yml
ui:
  ssl: false
  host: repositorio.emgs.mx
  port: 4000
  nameSpace: /

rest:
  ssl: true
  host: repositorio.emgs.mx
  port: 443
  nameSpace: /server


#TOMCAT 
    <Connector port="8080"
              minSpareThreads="25"
              enableLookups="false"
              connectionTimeout="20000"
              disableUploadTimeout="true"
              URIEncoding="UTF-8"/>




Everything seems to be running fine. Can log in, REST API appears to be working fine, but th yarn test gives me an error message as it is being chunked up into pieces. Read all troubleshooting but ive checked all my configs and everything seems to be fine.

yarn test:rest
yarn run v1.22.18
$ ts-node --project ./tsconfig.ts-node.json scripts/test-rest.ts
Building production app config
Overriding app config with /home/dspace/dspace-front-source/config/config.prod.yml
...Testing connection to REST API at https://repositorio.emgs.mx/server/api...

RESPONSE: 200

ERROR: INVALID DSPACE REST API! Response is not valid JSON!
Response returned:
{"dspaceUI":"https://repositorio.emgs.mx","dspaceName":"Repositorio Sanidad Militar","dspaceServer":"https://repositorio.emgs.mx/server","dspaceVersion":"DSpace 7.2.1","type":"root","_links":{"authn":{"href":"https://repositorio.emgs.mx/server/api/authn"},"authorizations":{"href":"https://repositorio.emgs.mx/server/api/authz/authorizations"},"bitstreamformats":{"href":"https://repositorio.emgs.mx/server/api/core/bitstreamformats"},"bitstreams":{"href":"https://repositorio.emgs.mx/server/api/core/bitstreams"},"browses":{"href":"https://repositorio.emgs.mx/server/api/discover/browses"},"bundles":{"href":"https://repositorio.emgs.mx/server/api/core/bundles"},"claimedtasks":{"href":"https://repositorio.emgs.mx/server/api/workflow/claimedtasks"},"claimedtasks-search":{"href":"https://repositorio.emgs.mx/server/api/workflow/claimedtasks/search"},"collections":{"href":"https://repositorio.emgs.mx/server/api/core/collections"},"communities":{"href":"https://repositorio.emgs.mx/server/api/core/communities"},"discover":{"href":"https://repositorio.emgs.mx/server/api/discover"},"dso":{"href":"https://repositorio.emgs.mx/server/api/dso/find{?uuid}","templated":true},"entitytypes":{"href":"https://repositorio.emgs.mx/server/api/core/entitytypes"},"eperson-registration":{"href":"https://repositorio.emgs.mx/server/api/eperson/registrations"},"epersons":{"href":"https://repositorio.emgs.mx/server/api/eperson/epersons"},"externalsources":{"href":"https://repositorio.emgs.mx/server/api/integration/externalsources"},"features":{"href":"https://repositorio.emgs.mx/server/api/authz/features"},"feedbacks":{"href":"https://repositorio.emgs.mx/server/api/tools/feedbacks"},"groups":{"href":"https://repositorio.emgs.mx/server/api/eperson/groups"},"itemrequests":{"href":"https://repositorio.emgs.mx/server/api/tools/itemrequests"},"items":{"href":"https://repositorio.emgs.mx/server/api/core/items"},"itemtemplates":{"href":"https://repositorio.emgs.mx/server/api/core/itemtemplates"},"metadatafields":{"href":"https://repositorio.emgs.mx/server/api/core/metadatafields"},"metadataschemas":{"href":"https://repositorio.emgs.mx/server/api/core/metadataschemas"},"oidc":{"href":"https://repositorio.emgs.mx/server/api/authn"},"pid":{"href":"https://repositorio.emgs.mx/server/api/pid/find{?id}","templated":true},"pooltasks":{"href":"https://repositorio.emgs.mx/server/api/workflow/pooltasks"},"pooltasks-search":{"href":"https://repositorio.emgs.mx/server/api/workflow/pooltasks/search"},"processes":{"href":"https://repositorio.emgs.mx/server/api/system/processes"},"properties":{"href":"https://repositorio.emgs.mx/server/api/config/properties"},"registrations":{"href":"https://repositorio.emgs.mx/server/api/eperson/registrations"},"relationships":{"href":"https://repositorio.emgs.mx/server/api/core/relationships"},"relationshiptypes":{"href":"https://repositorio.emgs.mx/server/api/core/relationshiptypes"},"resourcepolicies":{"href":"https://repositorio.emgs.mx/server/api/authz/resourcepolicies"},"resourcepolicies-search":{"href":"https://repositorio.emgs.mx/server/api/authz/resourcepolicies/search"},"scripts":{"href":"https://repositorio.emgs.mx/server/api/system/scripts"},"self":{"href":"https://repositorio.emgs.mx/server/api"},"sites":{"href":"https://repositorio.emgs.mx/server/api/core/sites"},"statistics":{"href":"https://repositorio.emgs.mx/server/api/statistics"},"submissionaccessoptions":{"href":"https://repositor
ERROR: INVALID DSPACE REST API! Response is not valid JSON!
Response returned:
io.emgs.mx/server/api/config/submissionaccessoptions"},"submissioncclicenseUrls":{"href":"https://repositorio.emgs.mx/server/api/config/submissioncclicenseUrls"},"submissioncclicenseUrls-search":{"href":"https://repositorio.emgs.mx/server/api/config/submissioncclicenseUrls/search"},"submissioncclicenses":{"href":"https://repositorio.emgs.mx/server/api/config/submissioncclicenses"},"submissiondefinitions":{"href":"https://repositorio.emgs.mx/server/api/config/submissiondefinitions"},"submissionforms":{"href":"https://repositorio.emgs.mx/server/api/config/submissionforms"},"submissionsections":{"href":"https://repositorio.emgs.mx/server/api/config/submissionsections"},"submissionuploads":{"href":"https://repositorio.emgs.mx/server/api/config/submissionuploads"},"usagereports":{"href":"https://repositorio.emgs.mx/server/api/statistics/usagereports"},"versionhistories":{"href":"https://repositorio.emgs.mx/server/api/versioning/versionhistories"},"versions":{"href":"https://repositorio.emgs.mx/server/api/versioning/versions"},"vocabularies":{"href":"https://repositorio.emgs.mx/server/api/submission/vocabularies"},"vocabularyEntryDetails":{"href":"https://repositorio.emgs.mx/server/api/submission/vocabularyEntryDetails"},"vocabularyEntryDetails-search":{"href":"https://repositorio.emgs.mx/server/api/submission/vocabularyEntryDetails/search"},"workflowactions":{"href":"https://repositorio.emgs.mx/server/api/config/workflowactions"},"workflowdefinitions":{"href":"https://repositorio.emgs.mx/server/api/config/workflowdefinitions"},"workflowitems":{"href":"https://repositorio.emgs.mx/server/api/workflow/workflowitems"},"workflowsteps":{"href":"https://repositorio.emgs.mx/server/api/config/workflowsteps"},"workspaceitems":{"href":"https://repositorio.emgs.mx/server/api/submission/workspaceitems"}}}
Done in 4.62s.


I would really appreciate the help.

Diego,

Tim Donohue

unread,
May 27, 2022, 12:28:25 PM5/27/22
to DSpace Technical Support
Hi Diego,

I've seen this one other time, but the user who encountered it never responded on what may have caused it.  See this thread https://groups.google.com/g/dspace-tech/c/S3yjduTP9Xg/m/Nv5-v6ooBAAJ

My suspicion is that some Proxy settings or firewall settings might simply be confusing the `yarn test:rest` script.  I've not been able to find a way to reproduce this error though, so it's extremely hard to debug. 

All that said, if everything in the UI is working for you (and it sounds like it may be), then I'd say there's no problem, and the output of the `yarn test:rest` script can be ignored in this scenario.  It's very possible that this is a bug in the `yarn test:rest` script -- and there may be scenarios where this script is creating a false positive error message.  (Again though, it's been very hard to debug this, as I've not yet been able to find a developer who has been able to reproduce this problem)

Tim

Diego Torres

unread,
May 27, 2022, 1:10:57 PM5/27/22
to DSpace Technical Support
Thanks a lot Tim. If I find any error along the way, I will make sure to report it.

Diego.

Sean.K...@umanitoba.ca

unread,
Sep 9, 2022, 4:15:22 PM9/9/22
to DSpace Technical Support
I just ran into this as well with DSpace 7.3. We have an extra layer in our environment with both nginx and an F5 load balancer acting as reverse proxies.

This is definitely a "Transfer-Encoding: chunked" issue as Tim alluded to in the other discussion thread he linked below. The "yarn test:rest" test does not handle the chunked data responses leading to the error. A local change to scripts/test-rest.ts to handle the chunking resolved the issue for the test.

However, I did some more testing (without the local fix) to learn about the chunking happening at the different layers in our environment (F5 load balancer -> nginx reverse proxy -> Tomcat 9 backend).

A direct "yarn test:rest" against Tomcat 9.0.62 worked fine, although HTTP 1.1 is used by default and the response had "Transfer-Encoding: chunked". In this case the chunk size defined by Tomcat 9 was large enough to contain the complete JSON response and there was no validation error.

A direct "yarn test:rest" against our nginx reverse proxy produced the JSON validation error message, and it appeared there were about two chunks (based on whatever default size nginx 1.20.1 uses). In this case, setting "chunked_transfer_encoding off;" in the nginx config and restarting nginx resolved the issue since this disables nginx chunking even for HTTP 1.1.

The final test against our F5 load balancer showed that it was chunking the data even further (resulting in about seven chunks rather than nginx's two chunks). This occurs even if chunking was turned off for nginx. I have not yet followed through with our central IT to adjust our F5, but I suspect that disabling chunking there could be done as well.

Regardless, if this is only an issue with "yarn test:rest" then no big deal. However, if other parts of DSpace 7.3 are not handling chunked transfer encoding properly, then that could lead to a variety of errors depending on the environment. I would certainly prefer to avoid disabling chunking at all proxy layers so I'm hoping this is just an issue with the test case.

--
Sean

Tim Donohue

unread,
Sep 12, 2022, 10:59:41 AM9/12/22
to Sean.K...@umanitoba.ca, DSpace Technical Support
Hi Sean,

Would you be willing to send us a Pull Request with the "local change to scripts/test-rest.ts to handle the chunking"?  https://github.com/DSpace/dspace-angular/

That'd be extremely helpful in us better understanding this issue & perhaps debugging whether the UI can currently handle chunked responses (and if not, finding a way to fix it). 

At the very least, it sounds like we have a bug in the "test-rest.ts" script (the code behind yarn test:rest). 

Thanks,

Tim

From: dspac...@googlegroups.com <dspac...@googlegroups.com> on behalf of Sean.K...@umanitoba.ca <Sean.K...@umanitoba.ca>
Sent: Friday, September 9, 2022 3:15 PM
To: DSpace Technical Support <dspac...@googlegroups.com>
Subject: [dspace-tech] Re: ERROR: INVALID DSPACE REST API! Response is not valid JSON!
 
--
All messages to this mailing list should adhere to the Code of Conduct: https://www.lyrasis.org/about/Pages/Code-of-Conduct.aspx
---
You received this message because you are subscribed to a topic in the Google Groups "DSpace Technical Support" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/dspace-tech/XU7KFZGOr94/unsubscribe.
To unsubscribe from this group and all its topics, send an email to dspace-tech...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dspace-tech/0feb7379-d24a-4b5d-94d8-134b2e4a7bc0n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages