﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
22990	jakarta.json.JsonException: Provider org.glassfish.json.JsonProviderImpl could not be instantiated: java.lang.ClassCastException: class org.glassfish.json.JsonProviderImpl cannot be cast to class jakarta.json.spi.JsonProvider (org.glassfish.json.JsonProviderImpl and jakarta.json.spi.JsonProvider are in unnamed module of loader 'app')	sebastic	team	"The Debian package throws and exception at startup after the update to r18746:
{{{
Revision:18746
Is-Local-Build:false
Build-Date:2023-06-06 03:52:38
Debian-Release:0.0.svn18746+dfsg-1~exp1
Build-Name:Debian

Identification: JOSM/1.5 (18746 Debian en) Linux Debian GNU/Linux 12 (bookworm)
Memory Usage: 160 MB / 3918 MB (64 MB allocated, but free)
Java version: 17.0.6+10-Debian-1, Debian, OpenJDK 64-Bit Server VM
Look and Feel: javax.swing.plaf.metal.MetalLookAndFeel
Screen: :0.0 1920×1200 (scaling 1.00×1.00)
Maximum Screen Size: 1920×1200
Best cursor sizes: 16×16→16×16, 32×32→32×32
Environment variable LANG: en_US.UTF-8
System property file.encoding: UTF-8
System property sun.jnu.encoding: UTF-8
Locale info: en_US
Numbers with default locale: 1234567890 -> 1234567890
Desktop environment: KDE
Java package: openjdk-17-jre:amd64-17.0.6+10-1
Java ATK Wrapper package: libatk-wrapper-java:all-0.40.0-3
libcommons-compress-java: libcommons-compress-java:all-1.22-1
libcommons-logging-java: libcommons-logging-java:all-1.2-3
fonts-noto: fonts-noto:all-20201225-1
liboauth-signpost-java: liboauth-signpost-java:all-1.2.1.2-3
VM arguments: [--module-path=/usr/share/openjfx/lib, --add-modules=java.scripting,java.sql,javafx.controls,javafx.media,javafx.swing,javafx.web, -Djosm.restart=true, -Djava.net.useSystemProxies=true, --add-exports=java.<user.name>e/sun.security.action=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED]

Plugins:
+ AddrInterpolation
+ DirectUpload
+ FixAddresses
+ HouseNumberTaggingTool
+ OpeningHoursEditor
+ RoadSigns
+ SimplifyArea
+ apache-commons
+ buildings_tools
+ editgpx
+ ejml
+ geotools
+ jackson
+ jaxb (35952)
+ jts
+ opendata
+ pbf
+ poly
+ reverter
+ terracer
+ todo
+ turnlanes
+ turnrestrictions
+ utilsplugin2
+ waydownloader
+ wikipedia

Tagging presets:
+ /usr/share/josm/data/defaultpresets.xml

Map paint styles:
- /usr/share/josm/styles/standard/potlatch2.mapcss
- <josm.pref>/plugins/ods-bag/Ods-bag-style-0.6.8.mapcss

Last errors/warnings:
- 00016.150 E: Handled by bug report queue: jakarta.json.JsonException: Provider org.glassfish.json.JsonProviderImpl could not be instantiated: java.lang.ClassCastException: class org.glassfish.json.JsonProviderImpl cannot be cast to class jakarta.json.spi.JsonProvider (org.glassfish.json.JsonProviderImpl and jakarta.json.spi.JsonProvider are in unnamed module of loader 'app'). Cause: java.lang.ClassCastException: class org.glassfish.json.JsonProviderImpl cannot be cast to class jakarta.json.spi.JsonProvider (org.glassfish.json.JsonProviderImpl and jakarta.json.spi.JsonProvider are in unnamed module of loader 'app')



=== REPORTED CRASH DATA ===
BugReportExceptionHandler#handleException:
No data collected.

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: main (1)
jakarta.json.JsonException: Provider org.glassfish.json.JsonProviderImpl could not be instantiated: java.lang.ClassCastException: class org.glassfish.json.JsonProviderImpl cannot be cast to class jakarta.json.spi.JsonProvider (org.glassfish.json.JsonProviderImpl and jakarta.json.spi.JsonProvider are in unnamed module of loader 'app')
        at jakarta.json.spi.JsonProvider.provider(JsonProvider.java:89)
        at jakarta.json.Json.createParser(Json.java:85)
        at org.openstreetmap.josm.tools.Territories.initializeExternalData(Territories.java:196)
        at org.openstreetmap.josm.tools.Territories.initializeExternalData(Territories.java:190)
        at org.openstreetmap.josm.tools.Territories.initialize(Territories.java:124)
        at org.openstreetmap.josm.gui.MainInitialization.lambda$beforeInitializationTasks$4(MainInitialization.java:85)
        at org.openstreetmap.josm.spi.lifecycle.InitializationTask.call(InitializationTask.java:33)
        at org.openstreetmap.josm.spi.lifecycle.Lifecycle.runInitializationTasks(Lifecycle.java:103)
        at org.openstreetmap.josm.spi.lifecycle.Lifecycle.initialize(Lifecycle.java:71)
        at org.openstreetmap.josm.gui.MainApplication.mainJOSM(MainApplication.java:959)
        at org.openstreetmap.josm.gui.MainApplication$3.processArguments(MainApplication.java:277)
        at org.openstreetmap.josm.gui.MainApplication.main(MainApplication.java:742)
Caused by: java.lang.ClassCastException: class org.glassfish.json.JsonProviderImpl cannot be cast to class jakarta.json.spi.JsonProvider (org.glassfish.json.JsonProviderImpl and jakarta.json.spi.JsonProvider are in unnamed module of loader 'app')
        at jakarta.json.spi.JsonProvider.provider(JsonProvider.java:84)
        ... 11 more
}}}
[https://stackoverflow.com/questions/70302594/javax-json-and-jakarta-json-in-the-same-application-org-glassfish-json-jsonprov Stack Overflow] suggests this is be caused by javax.json being on the classpath along with jakarta.json. GeoJSONImporter.java needs to be updated before javax.json can be removed from the classpath:
{{{
$ grep javax.json src/org/openstreetmap/ -r
src/org/openstreetmap/josm/gui/io/importexport/GeoJSONImporter.java:import javax.json.JsonException;
}}}
Patching this file to use jakarta.json.JsonException and removing the javax/json sources results in a build failure because org.glassfish.json also uses javax.json:
{{{
[...]
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonArrayBuilderImpl.java:63: error: cannot find symbol
    [javac] class JsonArrayBuilderImpl implements JsonArrayBuilder {
    [javac]                                       ^
    [javac]   symbol: class JsonArrayBuilder
[...]
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonArrayBuilderImpl.java:45: error: package javax.json does not exist
    [javac] import javax.json.*;
    [javac] ^
[...]
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonBuilderFactoryImpl.java:46: error: package javax.json does not exist
    [javac] import javax.json.JsonObject;
    [javac]                  ^
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonBuilderFactoryImpl.java:47: error: package javax.json does not exist
    [javac] import javax.json.JsonArray;
    [javac]                  ^
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonBuilderFactoryImpl.java:48: error: package javax.json does not exist
    [javac] import javax.json.JsonArrayBuilder;
    [javac]                  ^
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonBuilderFactoryImpl.java:49: error: package javax.json does not exist
    [javac] import javax.json.JsonBuilderFactory;
    [javac]                  ^
    [javac] /build/josm-0.0.svn18746+dfsg/src/org/glassfish/json/JsonBuilderFactoryImpl.java:50: error: package javax.json does not exist
    [javac] import javax.json.JsonObjectBuilder;
    [javac]                  ^
[...]
    [javac] Note: /build/josm-0.0.svn18746+dfsg/src/oauth/signpost/AbstractOAuthProvider.java uses or overrides a deprecated API.
    [javac] Note: Recompile with -Xlint:deprecation for details.
    [javac] Note: Some input files use unchecked or unsafe operations.
    [javac] Note: Recompile with -Xlint:unchecked for details.
    [javac] 100 errors
    [javac] only showing the first 100 errors, of 1179 total; use -Xmaxerrs if you would like to see more

BUILD FAILED
/build/josm-0.0.svn18746+dfsg/build.xml:242: Compile failed; see the compiler error output for details.
   at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1373)
   at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1092)
   at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
   at jdk.internal.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
   at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
   at org.apache.tools.ant.Task.perform(Task.java:350)
   at org.apache.tools.ant.Target.execute(Target.java:449)
   at org.apache.tools.ant.Target.performTasks(Target.java:470)
   at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
   at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
   at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
   at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
   at org.apache.tools.ant.Main.runBuild(Main.java:818)
   at org.apache.tools.ant.Main.startAnt(Main.java:223)
   at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
   at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)

Total time: 11 seconds
[...]
}}}
Reverting the changes from r18723 to use javax.json instead of jakarta.json resolves the exception at startup."	defect	new	normal	23.06	Core	tested			
