I can't use collabora CODE's conversion WOPI to convert the file!

I used “jodconver-remote” to convert docx to pdf and deployed the CODE container in podman without ssl, using port 9980.

But when calling to code’s conversion api, it prompted a file uri error, here is the detailed log:

wsd-00001-00044 2025-05-04 14:05:12.359595 +0000 [ docbroker_004 ] ERR  Unsupported URI [/opt/cool/child-roots/1-c2770680/tmp/incoming/cool-hKUwSiaWe2eWcH3c/test.docx] or no storage configured| wsd/Storage.cpp:223
wsd-00001-00044 2025-05-04 14:05:12.359682 +0000 [ docbroker_004 ] ERR  loading document exception: No Storage configured or invalid URI /opt/cool/child-roots/1-c2770680/tmp/incoming/cool-hKUwSiaWe2eWcH3c/test.docx]| wsd/DocumentBroker.cpp:3708
wsd-00001-00044 2025-05-04 14:05:12.359705 +0000 [ docbroker_004 ] ERR  Failed to add session to [%2Fopt%2Fcool%2Fchild-roots%2F1-c2770680%2Ftmp%2Fincoming%2Fcool-hKUwSiaWe2eWcH3c%2Ftest.docx] with URI [/opt/cool/child-roots/1-c2770680/tmp/incoming/cool-hKUwSiaWe2eWcH3c/test.docx]: No Storage configured or invalid URI /opt/cool/child-roots/1-c2770680/tmp/incoming/cool-hKUwSiaWe2eWcH3c/test.docx]| wsd/DocumentBroker.cpp:3667
wsd-00001-00044 2025-05-04 14:05:12.359727 +0000 [ docbroker_004 ] ERR  Exception while invoking poll [docbroker_004] callback: No Storage configured or invalid URI /opt/cool/child-roots/1-c2770680/tmp/incoming/cool-hKUwSiaWe2eWcH3c/test.docx]| net/Socket.cpp:607
frk-00015-00015 2025-05-04 14:05:12.359745 +0000 [ forkit ] WRN  The systemplate directory [/opt/cool/systemplate] is read-only, and at least [/opt/cool/systemplate//etc/passwd] is out-of-date. Will have to clone dynamic elements of systemplate to the jails. To restore optimal performance, make sure the files in [/opt/cool/systemplate/etc] are up-to-date.| common/JailUtil.cpp:587

The java program suggests that it can’t receive a response from CODE, but to be on the safe side, I’ve placed the code for the jodconverter to connect to CODE here as well, to make it easier to analyze.

@Bean
    @ConditionalOnProperty(name = "xxxx", havingValue = "REMOTE", matchIfMissing = false)
    public OfficeManager remoteOfficeManager() throws OfficeException {
        var url = "http://localhost:9980";
        SslConfig sslConfig = new SslConfig();
        sslConfig.setTrustAll(true);
        var manager = RemoteOfficeManager.builder()
            .urlConnection(url)
            .sslConfig(sslConfig)
            .build();
        manager.start();
        return manager;
    }

CODE’s description file:

# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-5.3.2
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2025-05-04T14:17:29Z"
  labels:
    app: co-pod
  name: co-pod
spec:
  containers:
  - env:
    - name: username
      value: admin
    - name: TERM
      value: xterm
    - name: password
      value: admin
    - name: dictionaries
      value: en_US
    - name: extra_params
      value: --o:ssl.enable=false
    - name: aliasgroup1
      value: https://.*:443,https://.*:9980
    image: docker.io/collabora/code:latest
    name: co
    ports:
    - containerPort: 9980
      hostPort: 9980
    securityContext:
      runAsNonRoot: true
    stdin: true
    tty: true

Thank you for your help.
BR

hii @armando007 welcome to collabora online forum!

You’re encountering this error:

Unsupported URI [/opt/cool/child-roots/.../test.docx] or no storage configured

This means that the Collabora Online (CODE) instance cannot open the document path passed by JODConverter Remote, because CODE does not support arbitrary local file paths via URI. CODE expects files to be passed via a supported WOPI interface, or in headless mode, via its own conversion endpoint.

Why It Fails

The RemoteOfficeManager in your Spring Boot setup is trying to open the document using a file path like:

/opt/cool/child-roots/.../test.docx

But CODE doesn’t understand local file paths from external callers. It only accepts:

  • WOPI endpoints (https://your-wopi-server/)
  • URLs passed to /lool/convert-to/ with appropriate parameters and access
  • WebSocket sessions for interactive editing

Use CODE’s Native Conversion API

CODE exposes an HTTP API for converting documents

Thanks
Darshan

Hi @darshan ,
Thanks for your help!
After posting, I used postman to send requests to the paths /lool/convert-to/pdf or /cool/convert-to/pdf, neither of which were successful. :frowning:
such as

curl --location --request POST 'http://localhost:9980/lool/convert-to/pdf' \
--form 'data=@"/Users/armando/Desktop/test.docx"'

I made sure not to include anything related to /opt/cool/xxxxx in my request, but when I looked the logs of code’s container, I still see familiar error logs…

wsd-00001-00034 2025-05-07 06:55:56.790846 +0000 [ docbroker_004 ] ERR  Unsupported URI [/opt/cool/child-roots/1-c0d4bb2a/tmp/incoming/cool-g2rh7nbaxt8MlXa1/test.docx] or no storage configured| wsd/Storage.cpp:223
frk-00015-00015 2025-05-07 06:55:56.790944 +0000 [ forkit ] WRN  The systemplate directory [/opt/cool/systemplate] is read-only, and at least [/opt/cool/systemplate//etc/passwd] is out-of-date. Will have to clone dynamic elements of systemplate to the jails. To restore optimal performance, make sure the files in [/opt/cool/systemplate/etc] are up-to-date.| common/JailUtil.cpp:587
wsd-00001-00034 2025-05-07 06:55:56.790950 +0000 [ docbroker_004 ] ERR  loading document exception: No Storage configured or invalid URI /opt/cool/child-roots/1-c0d4bb2a/tmp/incoming/cool-g2rh7nbaxt8MlXa1/test.docx]| wsd/DocumentBroker.cpp:3708
wsd-00001-00034 2025-05-07 06:55:56.790971 +0000 [ docbroker_004 ] ERR  Failed to add session to [%3A%2F%2F.%2A%3A0%2Fopt%2Fcool%2Fchild-roots%2F1-c0d4bb2a%2Ftmp%2Fincoming%2Fcool-g2rh7nbaxt8MlXa1%2Ftest.docx] with URI [/opt/cool/child-roots/1-c0d4bb2a/tmp/incoming/cool-g2rh7nbaxt8MlXa1/test.docx]: No Storage configured or invalid URI /opt/cool/child-roots/1-c0d4bb2a/tmp/incoming/cool-g2rh7nbaxt8MlXa1/test.docx]| wsd/DocumentBroker.cpp:3667
wsd-00001-00034 2025-05-07 06:55:56.790995 +0000 [ docbroker_004 ] ERR  Exception while invoking poll [docbroker_004] callback: No Storage configured or invalid URI /opt/cool/child-roots/1-c0d4bb2a/tmp/incoming/cool-g2rh7nbaxt8MlXa1/test.docx]| net/Socket.cpp:607

Could you help me again?

Thanks for the update — but the issue is likely due to missing headers, especially the Content-Disposition header that tells CODE the original filename. CODE needs this to process the file correctly, otherwise it defaults to a path that fails due to "No Storage configured

have you checked the sdk link Conversion API — SDK https://sdk.collaboraonline.com/ documentation ?

Hi @darshan ,

Thanks for your answer!

I sent the same request with reference to the documentation on the conversion API, but I still get a log with the words “No Storage configured or invalid URI /opt/cool/xxx”. :frowning:


I think -F will add Header Content-Disposition automatically.

This is the lastest error log:

wsd-00001-00044 2025-05-07 09:36:38.887563 +0000 [ docbroker_009 ] ERR  Unsupported URI [/opt/cool/child-roots/1-5d79495d/tmp/incoming/cool-r6R5imVMHGJFPJd0/test.docx] or no storage configured| wsd/Storage.cpp:223
wsd-00001-00044 2025-05-07 09:36:38.887696 +0000 [ docbroker_009 ] ERR  loading document exception: No Storage configured or invalid URI /opt/cool/child-roots/1-5d79495d/tmp/incoming/cool-r6R5imVMHGJFPJd0/test.docx]| wsd/DocumentBroker.cpp:3708
frk-00015-00015 2025-05-07 09:36:38.887708 +0000 [ forkit ] WRN  The systemplate directory [/opt/cool/systemplate] is read-only, and at least [/opt/cool/systemplate//etc/passwd] is out-of-date. Will have to clone dynamic elements of systemplate to the jails. To restore optimal performance, make sure the files in [/opt/cool/systemplate/etc] are up-to-date.| common/JailUtil.cpp:587
wsd-00001-00044 2025-05-07 09:36:38.887736 +0000 [ docbroker_009 ] ERR  Failed to add session to [%3A%2F%2F.%2A%3A0%2Fopt%2Fcool%2Fchild-roots%2F1-5d79495d%2Ftmp%2Fincoming%2Fcool-r6R5imVMHGJFPJd0%2Ftest.docx] with URI [/opt/cool/child-roots/1-5d79495d/tmp/incoming/cool-r6R5imVMHGJFPJd0/test.docx]: No Storage configured or invalid URI /opt/cool/child-roots/1-5d79495d/tmp/incoming/cool-r6R5imVMHGJFPJd0/test.docx]| wsd/DocumentBroker.cpp:3667
wsd-00001-00044 2025-05-07 09:36:38.887773 +0000 [ docbroker_009 ] ERR  Exception while invoking poll [docbroker_009] callback: No Storage configured or invalid URI /opt/cool/child-roots/1-5d79495d/tmp/incoming/cool-r6R5imVMHGJFPJd0/test.docx]| net/Socket.cpp:607

I’m guessing if the problem is related to my container environment, such as I’m using podman to run CODE’s containers, or my podman is running on macOS, or my container environment variables are set incorrectly, etc.

This is my pod configuration:

# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-5.3.2
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2025-05-07T09:44:26Z"
  labels:
    app: code-test-pod
  name: code-test-pod
spec:
  containers:
  - env:
    - name: extra_params
      value: --o:ssl.enable=false --o:ssl.termination=false --o:storage.filesystem[@allow]=true
        --o:logging.color=false --o:storage.ssl.enable=false
    - name: aliasgroup1
      value: https://.*:443,https://.*:15000,http://.*:80,http://.*:31000
    - name: username
      value: admin
    - name: TERM
      value: xterm
    - name: password
      value: admin
    - name: dictionaries
      value: en_US
    image: docker.io/collabora/code:latest
    name: code-test
    ports:
    - containerPort: 9980
      hostPort: 9980
    securityContext:
      privileged: true
      procMount: Unmasked
      runAsNonRoot: true
    stdin: true
    tty: true
  restartPolicy: Always

I apologize for asking you so many questions in a row, but I am beyond grateful because of your help!

Hi,
I’ve the same problem running collabora/code:latest (25.04.1.1.1) in Docker to be used together with Nextcloud. Document editing is working fine but creating the preview images leads to exactly this issue.
Also trying to call the convert-to endpoint manually using curl as mentioned above leads to the Empty replay from Server response and the Unsupported URI [/opt/cool/child-roots/...] or no storage configured log message.

For the requests from Nextcloud my nginx reverse proxy (configured according the Proxy settings docs) reports in the logs:

upstream prematurely closed connection while reading response header from upstream, client: 2a01:1234:1234::42, server: collabora.hostname.tld, request: "POST /cool/convert-to/png HTTP/1.1", upstream: "http://127.0.0.1:9980/cool/convert-to/png", host: "collabora.hostname.tld"

I figured out that it must be related to the latest version 25.04.1.1.1 in some way.
If I start the docker container with the previous version 24.04.13.3.1 the convert-to endpoint is working as expected, my preview images get generated and also the curl command is working.

Regards
Peter

1 Like

Hi @crycode-de

Thanks for the detailed report — very helpful in understanding the issue.

Since you’ve confirmed that the problem only occurs with version 25.04.1.1.1 and works fine with 24.04.13.3.1, this sounds like a regression in the latest Collabora Online version. The behavior you’re seeing with the /cool/convert-to endpoint and the proxy error suggests there may have been a change in how that endpoint handles requests or interacts with the storage backend.

To help the developers investigate this further, I’d recommend filing a bug report on our GitHub issue tracker here:
GitHub · Where software is built

When reporting, it’s helpful to include:

  • The full version number that’s affected (25.04.1.1.1)
  • A summary of the behavior (e.g., “convert-to endpoint fails behind reverse proxy in latest version”)
  • Logs (like the Unsupported URI and upstream prematurely closed connection)
  • Steps to reproduce (mentioning it works in 24.04.13.3.1, for comparison)

Thanks again for helping improve Collabora Online!

2 Likes