Skip to content

Latest commit

 

History

History
678 lines (554 loc) · 46.1 KB

support.adoc

File metadata and controls

678 lines (554 loc) · 46.1 KB

Symptome, deren Ursachen und Lösungen für das CAS

Ich hatte schon befürchtet, dass es keine Fortführung geben wird. Als ich dann die Meldung bekommen habe, musste ich vor Freude springen! Seitdem trägt mein Sitznachbar Ohrschützer.

— Anonymer Supportler

Am Anfang war ich skeptisch, aber als ich es für einen Hotline-Fall angefangen habe zu lesen, konnte ich es nicht mehr niederlegen bis ich durch war: 10/10! Kann ich nur jeden empfehlen! Wie ich den Hotline-Fall gelöst habe? Ich wusste, dass ich etwas vergessen habe!

— Verzweifelter Hotliner

Früher war ich echt skeptisch bezüglich der Trilogie und der Meinung, dass Code die Doku ist. Mein Therapeut hat mich dann aber doch vom Konzept überzeugt und siehe da, es funktioniert! Jetzt kann ich meinen Tee endlich in Ruhe geniessen!

— Tee abhängiger Entwickler




Allgemeines

WFC-Support

Manchmal ist es nicht eindeutig, ob der Fehler im CAS oder in der WFC Anwendung liegt. Hier geht es zur Support Seite der WFC Anwendung

Java-Spezifika

Einige Sachen beziehen sich auf allgemeine Java-Dinge und sind hier dokumentiert.

Spring-Boot-Spezifika

Einige Sachen beziehen sich auf allgemeine Spring-Boot-Dinge und sind hier und hier dokumentiert.

Fehler ohne erkennbaren Fehler-Eintrag im Log

CAS in der Konsole starten, um den Fehler zumindestens in der Konsole zu sehen. Es kann sein, dass eine Exception wie die MethodNotFoundException nicht im Log angezeigt wird, weil man eine solche Exception in der Regel nicht fangen kann.

Man kann hier auch die dazugehörige wrapper.log des Dienstes einsehen. Allerdings gab es schon fälle, wo ein Fehler in der Konsole sichtbar ist, aber nicht in der wrapper.log.

Log-Files durchsuchen.

Folgendes Schema kann man beim Log-Durchsuchen häufig verwenden:

  • Erst die request.log durchsuchen, um die dazugehörige Request zu finden: Falls man einen Fehler hat, kann man hier vorher noch über error.log die Zeit der Anfrage finden. Hiermit weiss man, was im Detail gemacht werden sollte.

  • Fehlermeldung über error.log suchen.

  • Ausführungsdetails über springLog.log suchen. Hier kann man Details herausfinden, welche vielleicht in der Fehlermeldung fehlen oder vom Dienst garnicht als Fehler erkannt wurden.

Anmeldung funktioniert nicht mit WFC.

  1. Die Anmeldung über den Browser versuchen.

  2. CAS neustarten.

setup-Befehl hat einen Fehler.

0815-Lösung

Manchmal löst man das Problem indem man eine neue leere Datenbank dafür verwendet, anstatt eine bereits vorhanden (create database <name>).

aero.minova.core.application.system.app.setup.xml nicht gefunden.

Die Fehlermeldung ist:

"message": "java.lang.RuntimeException: java.lang.RuntimeException: java.nio.file.NoSuchFileException: No setup file found with the name aero.minova.core.application.system.app.setup.xml",

Der Fehler ist, dass das veraltete core.application.system.app verwendet wird. Eigentlich müsste diese Abhängigkeit durch cas.app ersetzt werden, was allerdings zeitaufwendig ist (Ticket). Als Hotfix kann die core.application.system.app-Version auf 12.42.0 gesetzt werden. Entweder ist core.application.system.app in der betroffenen Version direkt als Abhängigkeit gelistet und braucht nur aktualisiert zu werden, oder die Abhängigkeit wird indirekt eingeführt. In dem zweiten Fall muss folgende Abhängigkeit hinzugefügt werden. Siehe hier für Details

<dependency>
    <groupId>aero.minova</groupId>
    <artifactId>core.application.system.app</artifactId>
    <version>12.42.0</version>
    <classifier>app</classifier>
</dependency>

The value is not set for the parameter number 7

Dabei kommt auch der Fehler com.microsoft.sqlserver.jdbc.SQLServerException: The statement must be executed before any results can be obtained.. Meistens fällt dabei auf, dass keinerlei SQL-Prozeduren beim Setup-Befehl aufgespielt wurden und auch keine in der Datenbank vorhanden sind.

<dependency>
    <groupId>aero.minova</groupId>
    <artifactId>core.application.system.app</artifactId>
    <version>12.42.0</version>
    <classifier>app</classifier>
</dependency>

Prozedur, View oder anderes SQL-Objekt fehlt nach Setup.

Die setup-Prozedur bricht nach einem Fehler nicht immer mit einem Fehler ab, sondern führt das Setup fort und gibt am Ende ein OK zurück (#285). In diesem Fall sollte man die Logs des CAS nach dem Wort Exception absuchen.

Läuft das CAS lokal in einem Docker-Container, kann in der Docker-GUI über einen Klick auf den betroffenen Container das Log angeschaut werden. Dort ist es auch eine Wortsuche möglich.

SQLServerException: Ungültiger Objektname "xtcasServiceMessageReceiverLoginType"

Ist ab Version 12.65.9 gefixed.

Falls die Version, in der der Fehler auftritt, unbedingt verwendet werden muss, kann folgendes getan werden: Das CAS braucht die fehlende Tabelle schon beim Start.

  1. In den application.properties folgendes setzen: spring.jpa.hibernate.ddl-auto=update

  2. CAS starten und warten bis es einmal ganz hoch gefahren ist.

  3. CAS stoppen.

  4. Property setzen: spring.jpa.hibernate.ddl-auto=none

  5. Folgende Query in DB ausführen:

declare @drop NVARCHAR(MAX) = N'';

SELECT @drop += N'
  ALTER TABLE ' + QUOTENAME(s.name) + N'.'
  + QUOTENAME(t.name) + N' DROP CONSTRAINT '
  + QUOTENAME(c.name) + ';'
FROM sys.objects AS c
INNER JOIN sys.tables AS t
ON c.parent_object_id = t.[object_id]
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE c.[type] IN ('F')
and t.name like '%xtcas%'
ORDER BY c.[type];

EXEC sp_executesql @drop;
  1. CAS starten und das Setup ganz normal ausführen.

ALTER TABLE statement conflicted with the FOREIGN KEY constraint

Fehler tritt bei Version 12.67.2 auf

Fehlermeldung:

Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xtcasLuUserPrivilegeUserGroup_UserPrivilegeKey". The conflict occurred in database "SISMINOVADEMODEV", table "dbo.xtcasUserPrivilege", column 'KeyLong'.
	at aero.minova.cas.setup.SetupService.lambda$setup$0(SetupService.java:81)
	at aero.minova.cas.controller.SqlProcedureController.checkForExtension(SqlProcedureController.java:208)
	at aero.minova.cas.controller.SqlProcedureController.executeProcedure(SqlProcedureController.java:175)
	... 129 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xtcasLuUserPrivilegeUserGroup_UserPrivilegeKey". The conflict occurred in database "SISMINOVADEMODEV", table "dbo.xtcasUserPrivilege", column 'KeyLong'.
	at aero.minova.cas.setup.InstallToolIntegration.installSetup(InstallToolIntegration.java:86)
	at aero.minova.cas.setup.SetupService.readSetups(SetupService.java:102)
	at aero.minova.cas.setup.SetupService.lambda$setup$0(SetupService.java:69)
	... 131 more
Caused by: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xtcasLuUserPrivilegeUserGroup_UserPrivilegeKey". The conflict occurred in database "SISMINOVADEMODEV", table "dbo.xtcasUserPrivilege", column 'KeyLong'.
	at ch.minova.install.setup.BaseSetup.readoutSchemaCreate(BaseSetup.java:233)
	at aero.minova.cas.setup.InstallToolIntegration.installSetup(InstallToolIntegration.java:73)
	... 133 more
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_xtcasLuUserPrivilegeUserGroup_UserPrivilegeKey". The conflict occurred in database "SISMINOVADEMODEV", table "dbo.xtcasUserPrivilege", column 'KeyLong'.
	at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:265)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1676)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:907)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:802)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7620)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3916)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:268)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:242)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.execute(SQLServerStatement.java:775)
	at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94)
	at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)
	at ch.minova.install.setup.BaseSetup.readoutSchemaCreate(BaseSetup.java:225)
	... 134 more

Dieser Fehler tritt auf, wenn mit der Version 12.67.2 ein setup ausgeführt wurde und dann auf eine vorherige Version 12.67.0 wechselt. Die CAS Tabellen in der Datenbank können nun unsichtbare Keys enthalten. Sie sind nicht über ein SQL-Tool wie z.B. AZURE Data Studio sichtbar. Folgende Lösungsansätze sind möglich:

1. Versuchen alle Keys zu löschen

declare @drop NVARCHAR(MAX) = N'';

SELECT @drop += N'
  ALTER TABLE ' + QUOTENAME(s.name) + N'.'
  + QUOTENAME(t.name) + N' DROP CONSTRAINT '
  + QUOTENAME(c.name) + ';'
FROM sys.objects AS c
INNER JOIN sys.tables AS t
ON c.parent_object_id = t.[object_id]
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id]
WHERE t.name like '%xtcas%'
ORDER BY c.[type];

EXEC sp_executesql @drop;

2. Betroffene Tabellen löschen

Die Fehlermeldung teilt einem mit welche Tabelle den Fehler wirft und dieser muss gelöscht werden. Welche Tabelle betroffen ist ist im Key ersichtlich. Im oberen Beispiel ist der Key FK_xtcasLuUserPrivilegeUserGroup_UserPrivilegeKey und die dazugehörige Tabelle ist die xtcasLuUserPrivilegeUserGroup

Wieder setup ausführen und schauen, ob nun die Keys korrekt sind. Wird der Fehler weiterhin geworfen aber mit einer anderen Tabelle Schritt 2 wiederholen.

ClassNotFoundException - Jar von Abhängigkeit fehlt.

Es wurde ein App-Projekt mit flaschen Release eingebunden.

In App-Projekten sind unter src/main/app/extensions und traget/extension (wird durch Maven und die POM reinkopiert) zusätzliche Jars für das CAS enthalten. Bei solchen Projekten gibt es in der Regel ein app und ein server Unterprojekt (manchmal mehr).

Wenn dieser Fehler auftritt, ist beim Bau/Release aus irgendwelchen Gründen die server Jar nicht in die app Jar kopiert worden. Ein häufiger Fehler ist es, dass bei einen Release nicht alles zusammen released wurde, sondern nur das App-Projekt veröffentlicht wurde, wodurch die Extension-Jar im App-Projekt fehlt.

Bei den Projekt aero.minova.birt.report bspw. gibt es eine Server und eine Model-Jar, welche in einem Release des App-Projektes gefehlt hat:

2022-05-11T12:25:43.319 Servlet.service() for servlet [dispatcherServlet] in context with path [/cas] threw exception [Request processing failed; nested exception is aero.minova.cas.api.domain.ProcedureException: java.lang.NoClassDefFoundError: aero/minova/BirtRequestParameter] with root cause
java.lang.NoClassDefFoundError: aero/minova/BirtRequestParameter
at aero.minova.birt.report.BirtReport.createOrReadBirtReport(BirtReport.java:215)
at aero.minova.birt.report.BirtReport.lambda$setup$0(BirtReport.java:79)
at aero.minova.cas.controller.SqlProcedureController.executeProcedure(SqlProcedureController.java:181)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

Die betroffene Abhängigkeit muss aktualisiert werden.

Altes und neues CAS sind im lib-Verzeichnis gemischt.

Das Project aero.minova.cas hies mal aero.minova.core.application.system. Es wurde umbenannt, da das Projekt primär unter CAS bekannt war und der Name somit irritierend war. Zudem war die Länge des Namens an einigen Stellen hinderlich.

Falls im lib Ordner jar vom alten und vom neuen CAS vorhanden sind, zeigt sich dies häufig dadurch, dass die eine Klasse von aero.minova.cas.* nicht gefunden wird:

Caused by: java.lang.ClassNotFoundException: aero.minova.cas.api.domain.ProcedureException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 19 common frames omitted

Es gibt mehrere Lösungen:

  • Das Kundenprojekt ist bereits in Ordnung: in diesem Fall kann man das Kundenprojekt komplett neu bauen und ausliefern.

  • Das Kundenprojekt hat selber gemischte Jars: in diesem Fall sollte man alle Abhängigkeiten auf den neuesten Stand bringen.

  • In der XML des Dienste Wrappers steht noch der alte Pfad: <arguments>-cp "lib/" aero.minova.core.application.system.CoreApplicationSystemApplication</arguments>: In diesem Fall muss der Pfad aktualisiert werden: <arguments>-cp "lib/" aero.minova.cas.CoreApplicationSystemApplication</arguments>

com.microsoft.sqlserver.jdbc.SQLServerException: Parameter @ProcedureName was not defined for stored procedure spMinovaCheckProcedure

Aus Gründen wird das cas.app-Projekt nicht zuerst ausgeführt. Dieses Projekt MUSS aber immer als erstes Projekt installiert werden, da in diesem auch die Prozeduren stecken, welche überprüfen, ob es Einträge in der tVersion10 für benötigte Prozeudren/Views gibt.

Um zu Überprüfen, welche Abhängigkeit für diesen Fehler sorgt, kann man nach und nach die Abhängigkeiten aus der POM löschen und damit das Testen etwas schneller geht, kann man, statt immer wieder den setup-Befehl auszuführen, folgenden Maven Befel in der Shell im betroffenen Projekt ausführen: mvn depgraph:graph -DshowDuplicates -DshowConflicts

Durch diesen wird in dem Projekt eine dependency-graph.dot erstellt, welche man öffnen kann und im Online-Tool https://dreampuf.github.io/GraphvizOnline/#digraph den Graph visualisieren kann. Hier muss man nur darauf schauen, ob der Knoten data.schema mit einem Pfeil (egal ob rot oder schwarz) auf cas.app zeigt. Falls es keinen solchen Pfeil gibt, müssen weitere Abhängigkeiten ausprobiert werden.

Ist die Abhängigkeit gefunden, sollte in dieser die data.schema.app-Abhängigkeit aktualisiert werden und auch darauf geachtet werden, dass keine zirkulären Abhängigkeiten existieren.

NoSuchBeanException

Für RestTemplate

Im cas.api Projekt gibt es bereits eine Konfigurationsklasse für RestTemplates. Falls in einer Extension ein RestTemplate gebraucht wird, einfach mit RestTemplate template = new RestTemplate(); initialisieren und nicht autowiren!

Für Gson

Im cas.api Projekt wird ebenfalls die Gson-Klasse initialisiert und mit Serializer und Deserializer versehen. Wird ein Gson-Objekt in einer Klasse gebraucht, kann dieses durch ClientRestAPI crapi = new ClientRestAPI(); CASRestAPI Gson gson = CASRestAPI.gson(); geholt werden. Auch hier darf das Gson-Objekt nicht mit der Annotation @Autowired versehen werden.

Einstellung ist nicht gültig.

Manche Einstellungen werden über die application.properties getätigt. Dabei muss beachtet werden, dass Backslash (\) ein Escape-Symbol ist. Wenn man also wirklich \ angibt, muss \\ stattdessen angegeben werden. Das kann besonders bei Passwörtern ärgerlich werden.

PrivilegeError

Die häufigste Exception. Tritt auf, wenn:

  • die aufrgerufene Prozedur/View/Tabelle nicht existiert. In diesem Fall wurde entweder Setup noch nicht ausgeführt oder die Prozedur/View/Tabelle, die man anfragt, war im Ordner rootPath/sql nicht enthalten.

  • der User, der die Anfrage schickt keine Berechtigung hat, diese auszuführen. In diesem Fall muss man prüfen, ob die UserGruppe in der Datenbank korrekt angelegt und wie hier richtig verknüpft ist.

IllegalArgumentException

URI is not absolute

Tritt (bisher) nur auf, wenn die BIRT Extension mit dem CAS gestartet wird und in den application.properties keine URI zum dazugehörigen BIRT Service gesetzt wurde.

SQL-Server

Deadlock auf der SQL-Datenbank

  1. Herausfinden welche SQl-Sessions einen Deadlock verursachen.

  2. Die SQL-Statements der betroffenen Sessions herausfinden.

  3. In dem request.log nachschauen, welche Anfrage an das CAS zu den SQL-Statements passen.

  4. Zeiten der gefundenen Aufrufe vergleichen. Sind die Zeiten gleich oder sehr nah beieinander, hat man die Aufrufe gefunden, die das Problem verursachen. Man muss dafür sorgen, dass die SQL-Prozeduren der Aufrufe nicht gleichzeitig ausgeführt werden. Wenn es nur ein Client ist, kann man die betroffenen Anfragen an das CAS in ein data/x-procedure packen. Andernfalls muss man dafür sorgen, dass die betroffenen Anfragen nicht gleichzeitig an das CAS geschickt werden. (Alternativ könnte man es so implementieren, dass man eine Option für das CAS einführt, womit sämtliche SQL-Anfragen nacheinander ausgeführt werden. Dadurch wären SQL-Deadlocks durch das CAS nicht mehr möglich.)

Fehlermeldung bei fehlender sqljdbc_auth.dll Datei

Wird integratedSecurity=true genutzt, aber die sqljdbc_auth.dll Datei fehlt, erscheint folgende Fehlermeldung.

com.microsoft.sqlserver.jdbc.SQLServerException: Dieser Treiber ist nicht für integrierte Authentifizierung konfiguriert. ClientConnectionId:3eda3c18-b1d3-4b94-86d3-13b95411f529
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:2924)
	at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<init>(AuthenticationJNI.java:73)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3686)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:94)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3675)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7194)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:2979)
        ...
Caused by: java.lang.UnsatisfiedLinkError: no sqljdbc_auth in java.library.path: [/Users/janiak/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2673)
	at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
	at java.base/java.lang.System.loadLibrary(System.java:1873)
	at com.microsoft.sqlserver.jdbc.AuthenticationJNI.<clinit>(AuthenticationJNI.java:52)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3685)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:94)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3675)
	...

SQLServerException: PKIX path building failed

Ab SpringBoot 2.7.0 wird für die Verbindung zum MS-SQL eine verschlüsselte Verbindung aufgebaut. Das heißt der Wert für encrypt ist nun per Default true zuvor war er auf false. Siehe spring-projects/spring-boot#31157

Fehlermeldung

2022-05-25T12:24:36.384 Servlet.service() for servlet [dispatcherServlet] in context with path [/cas] threw exception [Request processing failed; nested exception is aero.minova.cas.api.domain.ProcedureException: java.lang.RuntimeException: com.microsoft.sqlserver.jdbc.SQLServerException: Der Treiber konnte keine sichere Verbindung mit SQL Server über die SSL (Secure Sockets Layer)-Verschlüsselung herstellen. Fehler: 'PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target'. ClientConnectionId:19cbae03-1613-493f-acd0-decc7f65f14f] with root cause
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
	at java.base/sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
	at java.base/java.security.cert.CertPathBuilder.build(CertPathBuilder.java:297)
	at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:434)
	at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
	at java.base/sun.security.validator.Validator.validate(Validator.java:264)
	at java.base/sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:313)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:233)
	at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:110)

[...]

Lösung

Bei der Konfiguration von spring.datasource.url den Parameter encrypt auf false setzen, z.B.:

spring.datasource.url=<jdbc:sqlserver://host.docker.internal;encrypt=false;databaseName=test>

Port already in use

Genaue Fehlermeldung:

***************************
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8081 was already in use.

Der Server-Port vom CAS ist auf 8081 gestellt

Wenn die server.port Property in den application.properties auf 8081 gestellt ist und dieser Fehler kommt, läuft ein anderer Dienst gerade auf diesem Port.

War das CAS schon die ganze Zeit auf diesen Port eingestellt und diese Meldung kommt bei einem Neustart, muss man in den Taskmanager oder besser noch in den Sysinternals Process Explorer gehen und nach einer einsamen java.exe suchen und diese beenden.

Ist das CAS nicht bereits auf diesem Port gelaufen, muss man sich einen freien Port suchen und diesen in die application.properties schreiben.

Der CAS läuft nicht auf 8081.

Seit Release 12.43.0 gibt es unter dem Management-Port 8081 den SpringBoot /actuator. Man kann den Port umbelegen, indem man in den application.properties die Property management.server.port auf einen anderen Port setzt, oder per management.endpoints.enabled-by-default=false die Funktionalität abschalten.

Probleme beim Einloggen mit AD / LDAP

Log im CAS:

Active Directory authentication failed: Supplied password was invalid.

Hier sollten man an verschiedenen Stellen Einstellungen überprüfen:

In den application.properties:

  • security_ldap_domain

  • security_ldap_address

Man solle auf jeden Fall überprüfen, ob die beiden Properties richtig sind. Dabei ist zu beachten, dass die security_ldap_address immer mit 'ldap://' oder 'ldaps://' beginnt.

Die security_ldap_domain kann über den Command Line Befehl 'net user USERNAME /domain' herausgefunden werden. Hierbei wird USERNAME durch einen bekannten AD-Benutzernamen ersetzt.

Im WFC:

Beim Login im WFC sollte auch besonders darauf geachtet werden, dass der Benutzer richtig eingegeben wird, z.B. muss man auch auf Groß- und Kleinschreibung achten. Oft hat der Benutzer folgende Struktur: AD-NAME/Benutzername. Hier könnte man auch versuchen, den AD-NAMEN und den Slash weg zu lassen.

Generelle Probleme mit AD / LDAP

Es gibt in Spring-Boot diesbezüglich keine gute Debug/Trace-Logs. Die einzigen Optionen sind:

logging.level.org.springframework.security=trace
logging.level.org.springframework.security.ldap=trace

Allerdings ist das Log nicht besonders genau. Folgendes Vorgehen ist am besten: * Stack-Trace für den LDAP/AD-Fehler finden. * Im Stack-Trace die Methode für die Verbindung und Anmeldung finden und Break-Point an dieser stelle setzen. * Im Debug-Modus die Anmelde-Daten etc. in den Variablen prüfen.

Einige Benutzer funktionieren bei der Anmeldung und andere nicht.

Man sollte darauf achten, dass die Domänen der Nutzer alle eingetragen sind (getrennt mit ;). Die Domäne ist im Benutzerprinzipalname (=UPN=User Principal Name) der Teil nach dem @ Symbol.

Außerdem muss der Benutzername genau mit dem entsprechenden Eintrag in die Tabelle xtcasUser übereinstimmen.

Zip oder MD5-Dateien aus Internal/ können vom WFC nicht ausgelesen werden.

 msg.FileError %C:\ClusterStorage\Volume1\DUS\Shared Data\Program Files\SIS12\SIS\Internal\Zips\plugins.zip
2024-02-27T14:31:42.682 minova : files/zip: reports.zip
2024-02-27T14:31:42.705 minova : CAS : Execute : INSERT INTO xtcasError (Username, ErrorMessage, Date) VALUES (?,?,?) with values: minova, msg.FileError %C:\ClusterStorage\Volume1\DUS\Shared Data\Program Files\SIS12\SIS\Internal\Zips\reports.zip, 2024-02-27 14:31:42.7052953
2024-02-27T14:31:42.706 minova : CAS: Showing Stacktrace : java.nio.file.NoSuchFileException: msg.FileError %C:\ClusterStorage\Volume1\DUS\Shared Data\Program Files\SIS12\SIS\Internal\Zips\reports.zip
	at aero.minova.cas.service.FilesService.checkLegalPath(FilesService.java:193)
	at aero.minova.cas.controller.FilesController.getZip(FilesController.java:212)
	at aero.minova.cas.controller.FilesController.getFile(FilesController.java:162)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)

Die Zip und MD5-Dateien werden beim Start des CAS erstellt. Allerdings dauert dies etwas und es gibt kein Logging dazu.

        "returnErrorMessage": {
            "detailsMessage": "Java heap space",
            "cause": "aero.minova.cas.api.domain.ProcedureException: java.lang.OutOfMemoryError: Java heap space",
            "trace": [
                "aero.minova.cas.api.domain.ProcedureException: java.lang.OutOfMemoryError: Java heap space",
                "aero.minova.cas.controller.SqlProcedureController.executeProcedure(SqlProcedureController.java:191)",
                "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)",
                "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
                "java.base/java.lang.reflect.Method.invoke(Unknown Source)",
                "org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)",
                "org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)",
                "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)",
                "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)",
                "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)",
                "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)",
                "org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)",
                "org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)",
                "org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)",
                "org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)",
                "jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)",
                "org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)",
                "jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)",
                "org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)",
                "org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340)",
                "org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128)",
                "org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:100)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)",
                "org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:200)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:227)",
                "org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:221)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)",
                "org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)",
                "org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)",
                "org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)",
                "org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323)",
                "org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224)",
                "org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)",
                "org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)",
                "org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)",
                "org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)",
                "org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:109)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)",
                "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)",
                "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)",
                "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)",
                "org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)",
                "org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)",
                "org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)",
                "org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)",
                "org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)",
                "org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)",
                "org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:735)",
                "org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)",
                "org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)",
                "org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)",
                "org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)",
                "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)",
                "org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)",
                "org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)",
                "org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)",
                "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)",
                "java.base/java.lang.Thread.run(Unknown Source)",
                "Caused by: java.lang.OutOfMemoryError: Java heap space",
                "java.base/jdk.internal.misc.Unsafe.allocateUninitializedArray(Unknown Source)",
                "java.base/java.lang.StringConcatHelper.newArray(Unknown Source)",
                "java.base/java.lang.StringConcatHelper.newArrayWithSuffix(Unknown Source)",
                "java.base/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)",
                "java.base/java.lang.invoke.LambdaForm$MH/0x00007f2701018000.invoke(LambdaForm$MH)",
                "java.base/java.lang.invoke.LambdaForm$MH/0x00007f27010ce000.invoke(LambdaForm$MH)",
                "java.base/java.lang.invoke.Invokers$Holder.linkToTargetMethod(Invokers$Holder)",
                "ch.minova.install.setup.schema.XmlForeignKeyContraint.getSQLCode(XmlForeignKeyContraint.java:108)",
                "ch.minova.install.setup.schema.XmlDatabaseTable.getXMl_FK_Constraints(XmlDatabaseTable.java:263)",
                "ch.minova.install.setup.schema.XmlDatabaseTable.compareConstrainsFK(XmlDatabaseTable.java:252)",
                "ch.minova.install.setup.BaseSetup.generateUpdateTableConstraintsFK(BaseSetup.java:546)",
                "ch.minova.install.setup.BaseSetup.readoutSchemaCreate(BaseSetup.java:220)",
                "aero.minova.cas.setup.InstallToolIntegration.installSetup(InstallToolIntegration.java:73)",
                "aero.minova.cas.setup.SetupService.readSetups(SetupService.java:102)",
                "aero.minova.cas.setup.SetupService.lambda$setup$0(SetupService.java:69)",
                "aero.minova.cas.setup.SetupService$$Lambda$1093/0x00007f2701870c40.apply(Unknown Source)",
                "aero.minova.cas.controller.SqlProcedureController.checkForExtension(SqlProcedureController.java:208)",
                "aero.minova.cas.controller.SqlProcedureController.executeProcedure(SqlProcedureController.java:175)",
                "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
                "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)",
                "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)",
                "java.base/java.lang.reflect.Method.invoke(Unknown Source)",
                "org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)",
                "org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)",
                "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)",
                "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884)",
                "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)",
                "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)",
                "org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081)",
                "org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974)",
                "org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011)",
                "org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)"
            ]
        }
    },

Bei diesem Fehler einfach das cas neustarten.