Describe the bug
When running a new instance of librespot-java (Built and ran in Windows 10 x64, with JDK 15 installed), after selecting it from the Spotify dropdown menu using Zeroconf, an IllegalArgumentException gets thrown.
To Reproduce
- Build the dev branch (in my case, I ran Main.java from the player with IntelliJ directly);
- Go to Spotify client (I use Windows) and select the librespot-java instance in available devices.
- See the error
Expected behavior
After selecting the instance, music should begin to play (it was already playing on the official client to start).
Screenshots/Stracktraces/Logs
"C:\Program Files\Java\jdk-15.0.1\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3\lib\idea_rt.jar=52898:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\Users\Iscle\Documents\La Salle\Distribuida\librespot-java\player\target\classes;D:\Users\Iscle\Documents\La Salle\Distribuida\librespot-java\lib\target\classes;C:\Users\Iscle\.m2\repository\com\google\protobuf\protobuf-java\3.14.0\protobuf-java-3.14.0.jar;C:\Users\Iscle\.m2\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;C:\Users\Iscle\.m2\repository\xyz\gianlu\zeroconf\zeroconf\1.1.3\zeroconf-1.1.3.jar;C:\Users\Iscle\.m2\repository\com\squareup\okhttp3\okhttp\4.9.0\okhttp-4.9.0.jar;C:\Users\Iscle\.m2\repository\com\squareup\okio\okio\2.8.0\okio-2.8.0.jar;C:\Users\Iscle\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.4.0\kotlin-stdlib-common-1.4.0.jar;C:\Users\Iscle\.m2\repository\org\jetbrains\kotlin\kotlin-stdlib\1.4.10\kotlin-stdlib-1.4.10.jar;C:\Users\Iscle\.m2\repository\commons-net\commons-net\3.7.2\commons-net-3.7.2.jar;C:\Users\Iscle\.m2\repository\org\jcraft\jorbis\0.0.17\jorbis-0.0.17.jar;C:\Users\Iscle\.m2\repository\com\badlogicgames\jlayer\jlayer\1.0.2-gdx\jlayer-1.0.2-gdx.jar;C:\Users\Iscle\.m2\repository\com\electronwill\night-config\toml\3.6.3\toml-3.6.3.jar;C:\Users\Iscle\.m2\repository\com\electronwill\night-config\core\3.6.3\core-3.6.3.jar;C:\Users\Iscle\.m2\repository\org\jetbrains\annotations\20.1.0\annotations-20.1.0.jar;C:\Users\Iscle\.m2\repository\org\apache\logging\log4j\log4j-core\2.13.3\log4j-core-2.13.3.jar;C:\Users\Iscle\.m2\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;C:\Users\Iscle\.m2\repository\org\apache\logging\log4j\log4j-slf4j-impl\2.14.0\log4j-slf4j-impl-2.14.0.jar;C:\Users\Iscle\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Iscle\.m2\repository\com\lmax\disruptor\3.4.2\disruptor-3.4.2.jar" xyz.gianlu.librespot.player.Main
2021-01-08 01:48:50,748 INFO Utils:84 - Cryptography restrictions removal not needed.
2021-01-08 01:48:50,930 INFO ZeroconfServer:454 - Zeroconf HTTP server started successfully on port 1367!
2021-01-08 01:48:52,393 TRACE ZeroconfServer:518 - Handling request: GET /?action=getInfo HTTP/1.1, headers: {Keep-Alive=0, User-Agent=Spotify/114800625 Win32/0 (PC laptop), Connection=keep-alive, Host=192.168.1.58, Accept-Encoding=gzip, Content-Type=application/x-www-form-urlencoded}
2021-01-08 01:48:53,067 INFO Zeroconf:473 - Announced Service{alias='librespot-java', service='spotify-connect', port=1367, text={VERSION=1.0, CPath=/, Stack=SP}, addresses=[/192.168.1.58], domain='.local', protocol='tcp', host='DESKTOP-N234E4K'}.
2021-01-08 01:48:56,384 TRACE ZeroconfServer:518 - Handling request: GET /?action=getInfo&version=2.7.1 HTTP/1.1, headers: {Keep-Alive=0, User-Agent=Spotify/114800625 Win32/0 (PC laptop), Connection=keep-alive, Host=192.168.1.58, Accept-Encoding=gzip, Content-Type=application/x-www-form-urlencoded}
2021-01-08 01:48:57,372 TRACE ZeroconfServer:518 - Handling request: GET /?action=getInfo&version=2.7.1 HTTP/1.1, headers: {Keep-Alive=0, User-Agent=Spotify/114800625 Win32/0 (PC laptop), Connection=keep-alive, Host=192.168.1.58, Accept-Encoding=gzip, Content-Type=application/x-www-form-urlencoded}
2021-01-08 01:48:57,491 TRACE ZeroconfServer:518 - Handling request: POST / HTTP/1.1, headers: {Keep-Alive=0, User-Agent=Spotify/114800625 Win32/0 (PC laptop), Connection=keep-alive, Host=192.168.1.58, Accept-Encoding=gzip, Content-Length=776, Content-Type=application/x-www-form-urlencoded}
2021-01-08 01:48:57,562 WARN ZeroconfServer:319 - Failed closing previous session.
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'session' of xyz/gianlu/librespot/player/Main$1.sessionClosing must not be null
at xyz.gianlu.librespot.player.Main$1.$$$reportNull$$$0(Main.java) ~[classes/:?]
at xyz.gianlu.librespot.player.Main$1.sessionClosing(Main.java) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer.lambda$closeSession$0(ZeroconfServer.java:204) ~[classes/:?]
at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?]
at xyz.gianlu.librespot.ZeroconfServer.closeSession(ZeroconfServer.java:203) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer.handleAddUser(ZeroconfServer.java:316) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer.access$200(ZeroconfServer.java:40) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer$HttpRunner.handleRequest(ZeroconfServer.java:480) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer$HttpRunner.handle(ZeroconfServer.java:555) ~[classes/:?]
at xyz.gianlu.librespot.ZeroconfServer$HttpRunner.lambda$run$1(ZeroconfServer.java:463) ~[classes/:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) [?:?]
at java.lang.Thread.run(Thread.java:832) [?:?]
Version/Commit
0e85e1a (latest dev as of this issue)
Temporary solution I came up with
Instead of catching just IOException, catch all Exceptions (Exception) in this line:
|
} catch (IOException ex) { |
Edit: It looks like the issue is the @NotNull annotation in this line:
|
public void sessionClosing(@NotNull Session session) { |
In this case, it can be null. Although the parameter is not used in the example code, since I don't know the original usage, I prefer you fix it in the way you think works best.
Edit 2: Well, I made a PR (#291) which IMO is the appropiate way to solve the issue :)
Describe the bug
When running a new instance of librespot-java (Built and ran in Windows 10 x64, with JDK 15 installed), after selecting it from the Spotify dropdown menu using Zeroconf, an IllegalArgumentException gets thrown.
To Reproduce
Expected behavior
After selecting the instance, music should begin to play (it was already playing on the official client to start).
Screenshots/Stracktraces/Logs
Version/Commit
0e85e1a (latest dev as of this issue)
Temporary solution I came up with
Instead of catching just IOException, catch all Exceptions (Exception) in this line:
librespot-java/lib/src/main/java/xyz/gianlu/librespot/ZeroconfServer.java
Line 320 in 0e85e1a
Edit: It looks like the issue is the @NotNull annotation in this line:
librespot-java/player/src/main/java/xyz/gianlu/librespot/player/Main.java
Line 36 in 0e85e1a
In this case, it can be null. Although the parameter is not used in the example code, since I don't know the original usage, I prefer you fix it in the way you think works best.
Edit 2: Well, I made a PR (#291) which IMO is the appropiate way to solve the issue :)