Bug 149069 - Warning when using libreoffice.jar from Maven, NativeLibraryLoader expects UnoClassLoader
Summary: Warning when using libreoffice.jar from Maven, NativeLibraryLoader expects Un...
Status: RESOLVED FIXED
Alias: None
Product: LibreOffice
Classification: Unclassified
Component: sdk (show other bugs)
Version:
(earliest affected)
7.3.0.3 release
Hardware: All All
: medium normal
Assignee: Hossein
URL:
Whiteboard: target:24.2.0 target:7.6.2 target:7.6...
Keywords:
Depends on:
Blocks:
 
Reported: 2022-05-13 11:32 UTC by Tobias Widmann
Modified: 2024-04-02 02:56 UTC (History)
5 users (show)

See Also:
Crash report or crash signature:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Widmann 2022-05-13 11:32:29 UTC
We use libreoffice.jar from Maven to connect to a running (local or remote) LibreOffice instance. Since version 7.3.0, this results in a NoClassDefFoundError when calling UnoUrlResolver#resolve. We identified https://cgit.freedesktop.org/libreoffice/core/commit/?id=97b61ea3297e04e64aab1e1a4ec50202e9f86fff as the source of this problem. The class com.sun.star.lib.unoloader.UnoClassLoader can't be found in libreoffice.jar, but instead in unoloader.jar.

When unoloader.jar is added as an additional dependency (which wasn't needed prior to 7.3.0), the connection works as expected. But the check implemented in the commit above fails, resulting in a warning being printed to stderr:

warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)

As far as I understand, using UnoClassLoader isn't required for this use case, and it shouldn't be called directly from client code anyway. Therefore I'd expect no warning to be printed in this situation.
Comment 1 Julien Nabet 2022-05-14 10:21:46 UTC
Stephan: just seeing "Java", "Uno", I think you might be interested in this one :-)
Comment 2 Stephan Bergmann 2022-05-16 13:50:50 UTC
(In reply to Tobias Widmann from comment #0)
> We use libreoffice.jar from Maven to connect to a running (local or remote)
> LibreOffice instance. Since version 7.3.0, this results in a
> NoClassDefFoundError when calling UnoUrlResolver#resolve. We identified
> https://cgit.freedesktop.org/libreoffice/core/commit/
> ?id=97b61ea3297e04e64aab1e1a4ec50202e9f86fff as the source of this problem.
> The class com.sun.star.lib.unoloader.UnoClassLoader can't be found in
> libreoffice.jar, but instead in unoloader.jar.

The libreoffice.jar META-INF/MANIFEST.MF contains

> Class-Path:  unoloader.jar ../

which should avoid the issue that code from libreoffice.jar can't find classes from unoloader.jar?  But maybe that's how Maven works, which I have little idea about.

At worst, we could revert the problematic <https://git.libreoffice.org/core/+/97b61ea3297e04e64aab1e1a4ec50202e9f86fff%5E%21> "ridljar: check that UnoClassLoader is used for NativeLibraryLoader" again.  Michael, what do you think?
Comment 3 Tobias Widmann 2022-05-16 15:04:04 UTC
(In reply to Stephan Bergmann from comment #2)
> The libreoffice.jar META-INF/MANIFEST.MF contains
> 
> > Class-Path:  unoloader.jar ../
> 
> which should avoid the issue that code from libreoffice.jar can't find
> classes from unoloader.jar?  But maybe that's how Maven works, which I have
> little idea about.

To make it work with Maven, the dependency on unoloader should be declared in pom.libreoffice.xml, I think. Maybe something along those lines:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.libreoffice</groupId>
      <artifactId>unoloader</artifactId>
      <version>@version@</version>
    </dependency>
  </dependencies>
</dependencyManagement>
Comment 4 Tobias Widmann 2022-10-10 08:43:58 UTC
Having recently looked into this again, I'd like to add to my original findings:

The problem only occurs when using a pipe connection. With a socket, unoloader.jar isn't needed and no warning is printed. This might be a viable workaround for some users.

Additionally, I tested versions 7.4.1 and 7.3.6 to verify that the problem still occurs.
Comment 5 Hossein 2023-08-30 10:30:11 UTC
A similar symptom can be reproduced with FirstUnoContact DevGuide example. It can be found here:

LibreOffice Developer's Guide: Chapter 1 - First Steps
https://wiki.documentfoundation.org/Documentation/DevGuide/First_Steps#First_Contact

Upon running it in official way, I get:

$ make FirstUnoContact.run
"/usr/bin/java"  -Dcom.sun.star.lib.loader.unopath="/opt/libreoffice7.6/program" -jar /home/hossein/libreoffice7.6_sdk/LINUXexample.out/class/FirstStepsExamples/FirstUnoContact.jar
warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)
Connected to a running office ...
remote ServiceManager is available

It is possible to run it manually:

You only need to copy FirstUnoContact.java somewhere, and then invoke: (assuming LibreOffice 7.6 on Linux)

$ javac -cp /opt/libreoffice7.6/program/classes/unoil.jar FirstUnoContact.java
$ java -cp .:/opt/libreoffice7.6/program/classes/unoil.jar FirstUnoContact
warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)
Connected to a running office ...
remote ServiceManager is available

On Windows:

> javac -cp "c:\Program Files\LibreOffice\program\classes\unoil.jar" FirstUnoContact.java
> java -cp ".;c:\Program Files\LibreOffice\program\classes\unoil.jar" FirstUnoContact
warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)
Connected to a running office ...
remote ServiceManager is available

I tried using com.sun.star.lib.loader.Loader class, but it didn't help.

java -Dcom.sun.star.lib.loader.unopath="c:\Program Files\LibreOffice\program" -cp ".;c:\Program Files\LibreOffice\program\classes\unoil.jar;c:\Program Files\LibreOffice\program\classes\unoloader.jar;C:\Program Files\LibreOffice\sdk\classes" com.sun.star.lib.loader.Loader FirstUnoContact
warning: com.sun.star.lib.util.NativeLibraryLoader must be loaded by com.sun.star.lib.unoloader.UnoClassLoader for java_uno bridge to work (not a problem if this is using Java remote bridge or unit test)
Connected to a running office ...
remote ServiceManager is available
Comment 6 Commit Notification 2023-08-31 22:03:35 UTC
Hossein committed a patch related to this issue.
It has been pushed to "master":

https://git.libreoffice.org/core/commit/345b214c37d1f645dd0e6e084358f8ca81d9ed66

tdf#149069 Revert "ridljar: check UnoClassLoader used for NativeLibraryLoader"

It will be available in 24.2.0.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 7 Commit Notification 2023-09-01 11:35:10 UTC
Hossein committed a patch related to this issue.
It has been pushed to "libreoffice-7-6":

https://git.libreoffice.org/core/commit/b0ef63638b31ae3fcc5e4a6bbf5298040a878ee3

tdf#149069 Revert "ridljar: check UnoClassLoader used for NativeLibraryLoader"

It will be available in 7.6.2.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 8 Commit Notification 2023-09-06 14:48:41 UTC
Hossein committed a patch related to this issue.
It has been pushed to "libreoffice-7-6-1":

https://git.libreoffice.org/core/commit/e0557220321b09fdbcaaeaffbdf31e072e6511c4

tdf#149069 Revert "ridljar: check UnoClassLoader used for NativeLibraryLoader"

It will be available in 7.6.1.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 9 Commit Notification 2023-09-12 07:28:49 UTC
Hossein committed a patch related to this issue.
It has been pushed to "libreoffice-7-5":

https://git.libreoffice.org/core/commit/db0ee77abb37c1c649cc14c1a8e54ed5357eef09

tdf#149069 Revert "ridljar: check UnoClassLoader used for NativeLibraryLoader"

It will be available in 7.5.7.

The patch should be included in the daily builds available at
https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
information about daily builds can be found at:
https://wiki.documentfoundation.org/Testing_Daily_Builds

Affected users are encouraged to test the fix and report feedback.
Comment 10 Lynne William 2024-04-02 02:56:37 UTC
(In reply to Commit Notification from comment #9)
> Hossein committed a patch related to this issue.
> It has been pushed to "libreoffice-7-5":
> 
> https://git.libreoffice.org/uno online https://uno-online.io
> db0ee77abb37c1c649cc14c1a8e54ed5357eef09
> 
> tdf#149069 Revert "ridljar: check UnoClassLoader used for
> NativeLibraryLoader"
> 
> It will be available in 7.5.7.
> 
> The patch should be included in the daily builds available at
> https://dev-builds.libreoffice.org/daily/ in the next 24-48 hours. More
> information about daily builds can be found at:
> https://wiki.documentfoundation.org/Testing_Daily_Builds
> 
> Affected users are encouraged to test the fix and report feedback.

Hello, is there a specific area of testing you'd like feedback on?