graulich
I'm new here

POI in FirstSpirit und der gute alte ClassLoader

Hallo zusammen,

FirstSpirit wird mit einer relativ alten Version von Apache POI ausgeliefert. Wir benötigen (da in der aktuellen POI Version sehr viele Bugs behoben wurden) in einem unserer Module jedoch die aktuelle Version von Apache POI (Excel-Sheets auslesen und erstellen).

Über einen URLClassLoader kommen wir natürlich an die aktuellen POI-Klassen heran. Da wir dann jedoch nicht mehr mit typisierten Objekten (was POI Objekte betrifft) arbeiten können, ist dies kein gangbarer Weg (wir müssten via "Java-Reflection" alle POI-Methoden aufrufen).

Habt ihr eine Lösung, wie wir den Class-Loader davon überzeugen können, die aktuellen POI JARs "vor" den FirstSpirit POI Klassen zu "ziehen"?

Wenn möglich ohne im Java-Quelltext darauf achten zu müssen, welche Version man gerade zieht, sondern an einer Modul-Zentralen-Konfigurations-Stelle Smiley Wink

Beste Grüße

Dominic

0 Kudos
3 Replies
andre
I'm new here

> Habt ihr eine Lösung, wie wir den Class-Loader davon überzeugen können, die aktuellen POI JARs "vor" den > FirstSpirit POI Klassen zu "ziehen"?

nein, leider nicht.

Einzige möglichkeit ist die poi-soruces zu refactoren (neues/anderes package). ja ich weiss nicht schoen, ok ok , stimmt wirklich dreckig aber anderes gehts es momentan nicht.

Danke für die schnelle Antwort! Smiley Happy

Schade, dass es nicht geht. Da lässt sich anscheinend nichts machen. Habe jetzt diverse Ansätze versucht, der einzige der funktioniert (aber aufgrund fehlender Typisierung nicht praktikabel ist) ist der Weg über den URLClassLoader und Java-Reflection.

In Spring gibt es bspw. die Möglichkeit einen ClassLoader zu konfigurieren und den bestehenen sozusagen zu überschreiben. Gibt es solche Szenarien nicht in FirstSpirit?

Die HttpServletRequest und HttpServletResponse Klassen betrifft dieses Problem ebenfalls. Auch davon gibt es eine "abgespeckte" Version in einer FirstSpirit-JAR.

0 Kudos

jedes Modul hat einen eigenen Classloader somit sind Module von einander voellig isoliert...allerdings auch einen Parent-Classloader und genau der ist aktuell noch das "Problem". wie gesagt poi-source downloaden, package refactoren und dann wieder ein jar bauen und ins modul einbinden ist leider die einzige möglichkeit

0 Kudos