Md Nasim
Md Nasim

Reputation: 1

Getting SocketTimeoutException while converting office file into pdf using JODConverter with Libreoffice running on docker container

I am running Libreoffice in docker container on top of ubuntu:24.04 in headless mode. And running a Java Spring Boot server with jodconverter-spring-boot-starter, jodconverter-core and jodconverter-remote of version 4.4.8. But I am getting error: java.net.SocketTimeoutException: Read timed out.

Can you please do let me know how can I resolve the error?

pom.xml

<jodconverter.version>4.4.8</jodconverter.version>
<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-spring-boot-starter</artifactId>
    <version>${jodconverter.version}</version>
</dependency>

<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-core</artifactId>
    <version>${jodconverter.version}</version>
</dependency>

<dependency>
    <groupId>org.jodconverter</groupId>
    <artifactId>jodconverter-remote</artifactId>
    <version>${jodconverter.version}</version>
</dependency>

Code:

private final DocumentConverter documentConverter;

private File convertOfficeToPdf(
            @NonNull final MultipartFile file) {
    final File inputFile = new File("/tmp", requireNonNull(file.getOriginalFilename()));
    final File outputFile = new File("/tmp", "output.pdf");
    try {
        file.transferTo(inputFile);
        this.documentConverter.convert(inputFile).to(outputFile).execute();
    } catch (OfficeException | IOException e) {
        log.error("Failed to convert office file into pdf: message={} ", e.getMessage(), e);
    }
}

Dockerfile:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
    libreoffice \
    && apt-get clean

EXPOSE 2002

CMD ["libreoffice", "--headless", "--accept=socket,host=0.0.0.0,port=2002;urp;StarOffice.Service", "--nologo", "--nolockcheck", "--nodefault", "--nofirststartwizard", "--invisible"]

docker-compose.yml:

services:
  app:
    container_name: documents-server
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "2002:2002"

Configuration:

jodconverter:
  local:
    enabled: false
  remote:
    enabled: true
    url: http://localhost:2002
    socket-timeout: 300000
    connect-timeout: 300000

Error:

java.net.SocketTimeoutException: Read timed out
    at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:278) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:304) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:346) ~[na:na]
    at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:796) ~[na:na]
    at java.base/java.net.Socket$SocketInputStream.read(Socket.java:1099) ~[na:na]
    at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.16.jar:4.4.16]
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.14.jar:4.5.14]
    at org.apache.http.client.fluent.Request.internalExecute(Request.java:173) ~[fluent-hc-4.5.14.jar:4.5.14]
    at org.apache.http.client.fluent.Executor.execute(Executor.java:262) ~[fluent-hc-4.5.14.jar:4.5.14]
    at org.jodconverter.remote.task.RemoteConversionTask.execute(RemoteConversionTask.java:148) ~[jodconverter-remote-4.4.8.jar:4.4.8]
    at org.jodconverter.remote.office.RemoteOfficeManagerPoolEntry.doExecute(RemoteOfficeManagerPoolEntry.java:302) ~[jodconverter-remote-4.4.8.jar:4.4.8]
    at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.lambda$execute$0(AbstractOfficeManagerPoolEntry.java:81) ~[jodconverter-core-4.4.8.jar:4.4.8]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]
org.jodconverter.core.office.OfficeException: Task did not complete within timeout (120000 ms): RemoteConversionTask{source=SourceDocumentSpecsFromFile{file=docx_input.docx, format=docx}, target=TargetDocumentSpecsFromFile{file=output.pdf, format=pdf}}
    at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.waitTaskCompletion(AbstractOfficeManagerPoolEntry.java:120) ~[jodconverter-core-4.4.8.jar:4.4.8]
    at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.execute(AbstractOfficeManagerPoolEntry.java:86) ~[jodconverter-core-4.4.8.jar:4.4.8]
    at org.jodconverter.core.office.AbstractOfficeManagerPool.execute(AbstractOfficeManagerPool.java:216) ~[jodconverter-core-4.4.8.jar:4.4.8]
    at org.jodconverter.remote.RemoteConverter$RemoteConversionJob.doExecute(RemoteConverter.java:121) ~[jodconverter-remote-4.4.8.jar:4.4.8]
    at org.jodconverter.core.job.AbstractConversionJob.execute(AbstractConversionJob.java:63) ~[jodconverter-core-4.4.8.jar:4.4.8]
    at com.mtab.halo.documents.service.converter.function.OfficeFileToPdfConverter.convertOfficeToPdf(OfficeFileToPdfConverter.java:52) ~[classes/:na]
    at com.mtab.halo.documents.service.converter.function.OfficeFileToPdfConverter.accept(OfficeFileToPdfConverter.java:41) ~[classes/:na]
    at com.mtab.halo.documents.service.converter.ConverterServiceV1.convertToPdf(ConverterServiceV1.java:20) ~[classes/:na]
    at com.mtab.halo.documents.controller.ConverterController.postConvertToPdf(ConverterController.java:27) ~[classes/:na]
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.1.jar:6.2.1]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) ~[tomcat-embed-core-10.1.34.jar:6.0]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.1.jar:6.2.1]
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.34.jar:6.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.34.jar:10.1.34]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
    at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) ~[spring-web-6.2.1.jar:6.2.1]

Does anyone know how to resolve the above error?

Upvotes: 0

Views: 29

Answers (0)

Related Questions