Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Antworten
Rantau7
Beiträge: 9
Registriert: 14 Okt 2024, 09:45

Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von Rantau7 »

Offenbar seit dem Opsi 4.3 Update von der Version aus Ausgust 2024 auf März 2025 haben wir folgendes Problem:

Wenn man im Tool "opsi-configed" unter "Depot-Konfiguration" (dem zweiten Icon von oben - das mit dem tonneförmigen Symbol) eines unserer OPSI-Depots unter "Software-on-Demand" klickt kommt folgender Fehler:

"Es ist ein unerwarteter Fehler aufgetreten. class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap')
Bitte die Logdatei überprüfen. "


Interessanterweise tritt dieser Fehler nur bei einem unserer beiden Depots auf (leider ausgerechnet am MasterDepot).
In der "Server-Konfiguration" im opsi-configed kann man den Menüpunkt "Software-on-Demand" ohne Fehlermeldung auswählen.

Wenn man die Fehlermeldung betrachtet scheint es ja ein Type-Casting-Problem in den Variablen zu geben - das irgendwo was drin steht, was nicht zum Typ "boolean" als "true" oder "false" passt - ich konnte aber zumindest in den "Software-on-Demand"-Variablen keine Probleme feststellen (alles was "boolean" ist, hatte auch nur ein "true" oder "false" drin stehen - hab ich via opsi-cli abgefragt:

opsi-cli --output-format table jsonrpc execute config_getObjects '["id", "defaultValues", "possibleValues"]' '{"id": "software-on-demand.*"}'

bzw.

opsi-cli --output-format table jsonrpc execute config_getObjects '["id", "defaultValues", "possibleValues"]' '{"id": "*"}'


Ich habe mehrere Version von "opsi-configed" ausprobiert (4.3.7.3 bis hin zur 4.3.8.2) ausprobiert, ohne das sich etwas am Fehler geändert hat.


In der OPSI-webgui scheint es das Problem bei der Anwahl der "Software-on-Demand"-Settings nicht zu geben, aber ich habe den Eindruck, dass die Webgui eher keine vollwertige Alternative zum Tool "opsi-configed" darstellt.


Vielen Dank im Voraus zu jeglichen sachdienlichen Hinweisen.




In der oben erwähnten Logdatei selbst steht folgendes drin:

[3] [2025-05-06 09:48:31.543] [AWT-EventQueue-0] Es ist ein unerwarteter Fehler aufgetreten. class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap')
Bitte die Logdatei überprüfen.
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Boolean (java.lang.String and java.lang.Boolean are in module java.base of loader 'bootstrap')
at de.uib.utils.table.gui.PropertiesCellEditorAndRenderer.getTableCellRendererComponent(PropertiesCellEditorAndRenderer.java:262)
at java.desktop/javax.swing.JTable.prepareRenderer(Unknown Source)
at de.uib.utils.datapanel.EditMapPanelX$2.prepareRenderer(EditMapPanelX.java:242)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at java.desktop/javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at com.formdev.flatlaf.ui.FlatTableUI.paint(FlatTableUI.java:471)
at java.desktop/javax.swing.plaf.ComponentUI.update(Unknown Source)
at java.desktop/javax.swing.JComponent.paintComponent(Unknown Source)
at java.desktop/javax.swing.JComponent.paint(Unknown Source)
at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
at java.desktop/javax.swing.JComponent.paint(Unknown Source)
at java.desktop/javax.swing.JViewport.paint(Unknown Source)
at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
at java.desktop/javax.swing.JComponent.paint(Unknown Source)
at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
at java.desktop/javax.swing.JComponent.paint(Unknown Source)
at java.desktop/javax.swing.JComponent.paintChildren(Unknown Source)
at java.desktop/javax.swing.JSplitPane.paintChildren(Unknown Source)
at java.desktop/javax.swing.JComponent.paint(Unknown Source)
at java.desktop/javax.swing.JComponent.paintToOffscreen(Unknown Source)
at java.desktop/javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at java.desktop/javax.swing.RepaintManager.paint(Unknown Source)
at java.desktop/javax.swing.JComponent._paintImmediately(Unknown Source)
at java.desktop/javax.swing.JComponent.paintImmediately(Unknown Source)
at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
at java.desktop/javax.swing.RepaintManager$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)
Benutzeravatar
n.vidziunas
uib-Team
Beiträge: 23
Registriert: 17 Okt 2023, 14:38

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von n.vidziunas »

Hallo Rantau7,

welche Ausgabe liefert den configState_getObjects RPC-Methode für software-on-demand?

Wenn es aus irgendeinem Grund Werte gibt, die nicht boolesche Werte sind (die boolesche Werte sein sollten), können Sie diese theoretisch manuell löschen.

Mit freundlichen Grüßen
Naglis Vidziunas


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Rantau7
Beiträge: 9
Registriert: 14 Okt 2024, 09:45

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von Rantau7 »

das mit den Werten der Software-on-Demand-Variablen war auch nur ein Versuch der Deutung, dass irgendeine Variable nen ungültigen Wert hat, woran dann das Type-Casting scheitert und diese Fehlermeldung hervorgerufen wird.

Vorallem klärt es aber auch nicht, dass der Fehler nur bei einem der beiden OPSI-Depots auftritt, denn diese Variablen gelten ja eigentlich systemweit (Configuration-Server mit Master-Depot und den daran angeschlossenen Depot-Servern).

Ich weiß auch nicht, ob das Tool "opsi-configed" selbst noch irgendwo (lokal?) Konfigurationsdaten abspeichert, so dass der Fehler eventuell garnicht auf dem Server selbst auftaucht, sondern nur im Tool "opsi-configed" - wobei auch hier manches dagegen spricht, denn auf einem anderen System als meins, zeigt das "opsi-configed"-Tool den gleichen Fehler wie auf meinem System an.
OPSI-CLI_Software_on_Demand.png
OPSI-CLI_Software_on_Demand.png (25.27 KiB) 2898 mal betrachtet

Wahrscheinlich sind es auch andere Variablen, als die Software-on-Demand - aber die Logdatei liefert leider wenig aussagekräftiges an welcher Variable der Type-Cast letztendlich scheitert.
Rantau7
Beiträge: 9
Registriert: 14 Okt 2024, 09:45

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von Rantau7 »

Ich habe möglicherweise eine Spur gefunden, scheitere aber aktuell an der Syntax, wie ich diese ConfigState-Einträge bearbeiten kann:

jedenfalls habe ich 2 Einträge gefunden, die als value "False" bzw "True" enthalten - man beachte die Großschreibung, denn alle anderen Einträge werden eigentlich immer klein geschrieben (also "true" bzw. "false").
Ich vermute, dass er "True" bzw. "False" in Großschreibung nicht auf den Datentyp "boolean" anwenden kann, der "true" bzw. "false" (in Kleinschreibung) erlaubt?


Über das folgende Kommando hab ich die beiden besagten Einträge mit dem großen "False" bzw. "True" gefunden:

opsi-cli --attributes=all --output-format table jsonrpc execute configState_getObjects '[]' '{}'


configId │ ident │ objectId │ type │ values

software-on-demand.active │ software-on-demand.active;hati.kl.klippel.de │ hati.kl.klippel.de │ ConfigState │ False

software-on-demand.installation-now-button | software-on-demand.installation-now-button;hati.k… │ hati.kl.klippel.de │ ConfigState │ True
Rantau7
Beiträge: 9
Registriert: 14 Okt 2024, 09:45

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von Rantau7 »

Kann mir eventuell jemand weiterhelfen, wie ich diese ConfigState-Einträge bearbeiten kann?

Ich möchte die "values" für die folgenden beiden Einträge (siehe unten) von "False" auf "false" bzw. "True" auf "true" abändern (in der Hoffnung, dass damit das eingangs geschilderte Type-Casting-Problem behoben werden kann.

Vielleicht sieht das ja zufällig auch einer der OPSI-Entwickler und kann mir sagen, ob ich überhaupt auf dem richtigen Weg bin...



Es geht um folgende Einträge, abgerufen über folgende Kommandozeile:
opsi-cli --attributes=all --output-format table jsonrpc execute configState_getObjects '[]' '{}'


configId │ ident │ objectId │ type │ values

software-on-demand.active │ software-on-demand.active;hati.kl.klippel.de │ hati.kl.klippel.de │ ConfigState │ False

software-on-demand.installation-now-button | software-on-demand.installation-now-button;hati.k… │ hati.kl.klippel.de │ ConfigState │ True
Benutzeravatar
j.schneider
uib-Team
Beiträge: 2042
Registriert: 29 Mai 2008, 15:14

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von j.schneider »

Hallo,

das Bearbeiten geht so:

Code: Alles auswählen

opsi-cli jsonrpc execute configState_updateObjects '{"type":"ConfigState","configId":"software-on-demand.active","objectId":"hati.kl.klippel.de","values":[true]}'
Grüße
Jan Schneider


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Rantau7
Beiträge: 9
Registriert: 14 Okt 2024, 09:45

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von Rantau7 »

Super vielen Dank - das hat geholfen, ich konnte das Problem damit lösen.


Also nochmal zusammengefasst:

Aus noch unbekannten Gründen hatten bei uns 2 dieser "software-on-demand...." ConfigState-Variablen einen "falschen" Wert, bzw. eine falsche Schreibweise "True" statt "true" und "False" statt "false".

Das Tool "opsi-configed" konnte deshalb offenbar den Status dieser Variablen nicht korrekt auswerten (das Matching der Werte auf den Typ "boolean" misslang) und deshalb ist die "opsi-configed"-Oberfläche bei jedem Zugriff auf die software-on-demand Kategorie gescheitert - sowohl in der "Depot-Konfiguration" -> "Host-Parameter" -> "software-on-demand", als auch in der "Client-Konfiguration" -> "Host-Parameter" -> "software-on-demand".


Ich kann mich dunkel entsinnen, früher dieses groß geschriebene "True" und "False" auch im opsi-configed an den Properties mal gesehen zu haben (ohne das das Tool gemeckert hätte oder abgeschmiert wäre) - aber seit dem letzten Update hat das dann offenbar nicht mehr funktioniert.

Die Fehlermeldung im opsi-configed bzw. der Log-Datei ist an der Stelle leider auch etwas ungenau - Type-Casting auf boolean - ja, aber welche Variable das genau betrifft, steht nicht drin ("Unknown Source", bzw. man wird mit "in module java.base of loader 'bootstrap'... " auch auf eine falsche Fährte gebracht).
Zum Glück wusste ich noch von diesen unterschiedlichen Schreibweisen in den Werten, so dass ich von Anfang darauf aus war, diese zu suchen und zum Glück auch wieder gefunden habe.

Die opsi-cli ist ein tolles, sehr mächtiges Tool, leider ist die Doku noch recht rudimentär - es gibt nur ein paar kleine harmlose Beispiele, wie man ein paar Informationen anzeigen lassen kann - die tiefere Funktionsweise der Syntax muss man sich selber zusammen reimen.
Aber zum Glück lesen die Entwickler von UIB hier im Forum mit und können helfen :-)
Benutzeravatar
n.vidziunas
uib-Team
Beiträge: 23
Registriert: 17 Okt 2023, 14:38

Re: Opsi 4.3 - Fehler in "opsi-configed": class java.lang.String cannot be cast to class java.lang.Boolean

Beitrag von n.vidziunas »

Hallo Rantau7,

vielen Dank für Ihre gründlichen Tests, Ihren detaillierten Problembericht und Ihre Beiträge.

Wir haben das Logging verbessert und die Behandlung von booleschen Werten erweitert, um sicherzustellen, dass großgeschriebene Strings (z.B. „True“, „False“) nun korrekt erkannt werden. Diese Änderungen werden in der nächsten Version enthalten sein.

Mit freundlichen Grüßen
Naglis Vidziunas


Vielen Dank für die Nutzung von opsi. Im Forum ist unser Support begrenzt.

Für den professionellen Einsatz und individuelle Beratung empfehlen wir einen Support-Vertrag und eine Schulung.
Gerne informieren wir Sie zu unserem Angebot.

uib GmbH
Telefon: +49 6131 27561 0
E-Mail: sales@uib.de


Antworten