For unknown reason, it was found that one of the roster entry files of the aTalk user account in the RosterStore has empty content. This causes smack ParserUtils to throw an IllegalArgumentException.
However this IllegalArgumentException is not handled within smack nor pass on to upper app to take action. Because of this, aTalk user account login failed; but there is no error message displays to user for action.
Any proposal on how to resolve this kind of problem i.e. corrupted roster entry file?
I just manually deleted this corrupted file and aTalk returns to normal operation on next launch.
=========== aTalk debug log ============
2020-12-27 14:25:24.647 19777-20832/org.atalk.android E/AndroidRuntime: FATAL EXCEPTION: Smack Cached Executor
Process: org.atalk.android, PID: 19777
java.lang.IllegalArgumentException: Document contains no start tag
at org.jivesoftware.smack.util.ParserUtils.forwardToStartElement(ParserUtils.java:72)
at org.jivesoftware.smack.util.PacketParserUtils.getParserFor(PacketParserUtils.java:85)
at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.readEntry(DirectoryRosterStore.java:194)
at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.getEntries(DirectoryRosterStore.java:120)
at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1739)
at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1687)
at org.jivesoftware.smack.SmackFuture$1.run(SmackFuture.java:178)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
2020-12-27 14:25:24.653 19777-20832/org.atalk.android W/aTalk: [207538] org.jivesoftware.smack.AbstractXMPPConnection.uncaughtException() Thread[Smack Cached Executor,5,main] encountered uncaught exception
java.lang.IllegalArgumentException: Document contains no start tag
at org.jivesoftware.smack.util.ParserUtils.forwardToStartElement(ParserUtils.java:72)
at org.jivesoftware.smack.util.PacketParserUtils.getParserFor(PacketParserUtils.java:85)
at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.readEntry(DirectoryRosterStore.java:194)
at org.jivesoftware.smack.roster.rosterstore.DirectoryRosterStore.getEntries(DirectoryRosterStore.java:120)
at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1739)
at org.jivesoftware.smack.roster.Roster$RosterResultListener.onSuccess(Roster.java:1687)
at org.jivesoftware.smack.SmackFuture$1.run(SmackFuture.java:178)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)