Fehlerbehebung
com.top_logic.knowledge.indexing.lucene.ContentRetrievalFailedException: Retrieving the description failed! at com.top_logic.knowledge.indexing.lucene.LuceneThread.getDescription(LuceneThread.java:907) at com.top_logic.knowledge.indexing.lucene.LuceneThread.indexContent(LuceneThread.java:899) at com.top_logic.knowledge.indexing.lucene.LuceneThread.indexQueue(LuceneThread.java:831) at com.top_logic.knowledge.indexing.lucene.LuceneThread.workOnQueues(LuceneThread.java:719) at com.top_logic.knowledge.indexing.lucene.LuceneThread$1.run(LuceneThread.java:704) at com.top_logic.knowledge.indexing.lucene.LuceneThread$1.run(LuceneThread.java:699) at com.top_logic.basic.thread.ThreadContextManager.inInteractionInternal(ThreadContextManager.java:810) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteractionInternal(ThreadContextManager.java:832) at com.top_logic.basic.thread.ThreadContextManager.inSystemInteraction(ThreadContextManager.java:294) at com.top_logic.basic.thread.ThreadContext.inSystemContext(ThreadContext.java:156) at com.top_logic.knowledge.indexing.lucene.LuceneThread.workInSystemContext(LuceneThread.java:699) at com.top_logic.knowledge.indexing.lucene.LuceneThread.workHandlingReaderWriter(LuceneThread.java:665) at com.top_logic.knowledge.indexing.lucene.LuceneThread.workSurvivingExceptions(LuceneThread.java:653) at com.top_logic.knowledge.indexing.lucene.LuceneThread.work(LuceneThread.java:615) at com.top_logic.knowledge.indexing.lucene.LuceneThread.run(LuceneThread.java:78) Caused by: java.lang.ClassCastException: class com.top_logic.basic.util.ResKey$LiteralKey cannot be cast to class java.lang.String (com.top_logic.basic.util.ResKey$LiteralKey is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap') at com.top_logic.model.TLNamed.getName(TLNamed.java:34) at com.top_logic.knowledge.indexing.DefaultIndexingService$WrapperContentObject.getDescription(DefaultIndexingService.java:836) at com.top_logic.knowledge.indexing.lucene.LuceneThread.getDescription(LuceneThread.java:904) ... 14 more
Analyse
Implementierungsklassen von persistenten Objekten implmentieren standardmäßig tl:com.top_logic.model.TLNamed, obwohl das zugehörige Modell kein oder kein kompatibles Namensattribut besitzt. Deklariert man in einer Klasse ein Namensattribut das nicht vom Typ String ist, so wird trotzdem für die Darstellung des Objektes die String getName()-Methode gerufen, die versucht den Wert des Namensattributs nach String zu casten. Das schlägt fehl.
Verbesserung
In tl:com.top_logic.model.TLNamed den Wert des Namensattributs über einen passenden tl:LabelProvider in einen String umwandeln, wenn der Wert kein String ist.
Test
- Typ mit verpflichtendem "Internationalisierte Zeichenkette" als name-Attribut anlegen.
- Im Instanzeneditor eine Instanz des Typs anlegen.
- com.top_logic.demo/src/test/java/test/com/top_logic/demo/scripted/model/attribute/TestI18NStringAsName.script.xml