Modify ↓

Opened 8 months ago

Closed 4 days ago

Last modified 4 days ago

#24676 closed defect (fixed)

Upload using Plugin DirectUpload yields in error

Reported by: bielebog Owned by: team
Priority: normal Milestone:
Component: Plugin DirectUpload Version: latest
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Select a GPX layer
  2. Press ctrl-g to open DirectUpload dialog [DirectUpload (36474)]
  3. Fill in necessary values
  4. Press button "GPS-Spur hochladen"

What is the expected result?

Dialog should show successful upload

What happens instead?

Dialog "GPX-Spuren hochladen" shows "Fehler beim Hochladen"

Please provide any additional information below. Attach a screenshot if possible.

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2026-03-14 14:08:11 +0100 (Sat, 14 Mar 2026)
Revision:19547
Build-Date:2026-03-15 02:30:49
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (19547 de) Linux Mint 22.2
Memory Usage: 376 MB / 11864 MB (98 MB allocated, but free)
Java version: 21.0.10+7-Ubuntu-124.04, Ubuntu, OpenJDK 64-Bit Server VM
Look and Feel: javax.swing.plaf.metal.MetalLookAndFeel
Screen: :0.0 1920x1200x[Multi depth]@60Hz (scaling 1.00×1.00) :0.1 1680x1050x[Multi depth]@60Hz (scaling 1.00×1.00)
Maximum Screen Size: 1920×1200
Best cursor sizes: 16×16→16×16, 32×32→32×32
Environment variable LANG: de_DE.UTF-8
System property file.encoding: UTF-8
System property sun.jnu.encoding: UTF-8
Locale info: de_DE
Numbers with default locale: 1234567890 -> 1234567890
Desktop environment: X-Cinnamon
Java package: openjdk-21-jre:amd64-21.0.10+7-1~24.04
libcommons-compress-java: libcommons-compress-java:all-1.25.0-1
libcommons-logging-java: libcommons-logging-java:all-1.3.0-1ubuntu1
fonts-noto: fonts-noto:all-20201225-2
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, -Djosm.dir.name=JOSM-latest, -Djava.net.useSystemProxies=true, -XX:MaxRAMPercentage=75.0, --add-exports=java.base/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:
+ DirectUpload (36474)
+ ElevationProfile (36474)
+ FootAndCycleways (1757059790)
+ ImportImagePlugin (36474)
+ InfoMode (36474)
+ PicLayer (272)
+ RoadSigns (36474)
+ apache-commons (36474)
+ changessum (v0.1.1)
+ editgpx (36474)
+ ejml (36474)
+ eventbus (36474)
+ geotools (36474)
+ imagery_offset_db (36474)
+ jackson (36474)
+ jaxb (36474)
+ jts (36474)
+ notesolver (0.5.0)
+ photo_geotagging (36474)
+ photoadjust (36474)
+ plbuildings (2.2.2)
+ reltoolbox (36474)
+ reverter (36474)
+ shrinkwrap (v1.1.3)
+ tageditor (36474)
+ terracer (36484)
+ turnlanes (36474)
+ undelete (36474)
+ utilsplugin2 (36474)
+ waydownloader (36474)

Tagging presets:
+ https://raw.githubusercontent.com/Heiner-Sch/JOSM-preset-trees-Europe/master/JOSM-Preset_Trees.xml
+ https://josm.openstreetmap.de/josmfile?page=Presets/LaneAttributes&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/pedestrian_crossings_in_DE&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/ParcelLockers&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/ParkingLanes&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/PostPartner&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Radwege&zip=1
+ https://raw.githubusercontent.com/yopaseopor/traffic_signs_preset_JOSM/master/DE.zip
+ https://josm.openstreetmap.de/josmfile?page=Presets/hiking_routes_with_trail_marking&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Surveillance&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/OpenStationMap&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Simple_Indoor_Tagging&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Stolpersteine&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Stolpersteine&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Community_Centre&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Greenery&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/Historic_Stone&zip=1
+ https://josm.openstreetmap.de/josmfile?page=Presets/NewTags&zip=1

Map paint styles:
+ https://raw.githubusercontent.com/tordanik/direction-cones-style/refs/heads/main/direction-cones.mapcss

Last errors/warnings:
- 00024.264 E: Cannot parse data set from the server: I/O error while auto-detecting the encoding of stream
- 00024.265 W: Error at refreshing profiles from server: zzbuildingsnrw

---

JOSM log show this traceback:

2026-03-15 23:06:37.574 INFORMATION: Changing status to: Idle
2026-03-15 23:06:54.132 INFORMATION: POST ​https://api.openstreetmap.org/api/0.6/gpx/create (257 kB) ...
2026-03-15 23:06:54.217 INFORMATION: POST ​https://api.openstreetmap.org/api/0.6/gpx/create -> HTTP/1.1 417 (2 ms; 19 B)
org.openstreetmap.josm.gui.progress.ProgressException: Expected states are [IN_TASK] but current state is FINISHED

at org.openstreetmap.josm.gui.progress.AbstractProgressMonitor.checkState(AbstractProgressMonitor.java:84)
at org.openstreetmap.josm.gui.progress.AbstractProgressMonitor.subTask(AbstractProgressMonitor.java:136)
at org.openstreetmap.josm.io.StreamProgressUpdater.initProgressMonitor(StreamProgressUpdater.java:32)
at org.openstreetmap.josm.io.StreamProgressUpdater.<init>(StreamProgressUpdater.java:27)
at org.openstreetmap.josm.io.ProgressInputStream.<init>(ProgressInputStream.java:34)
at org.openstreetmap.josm.tools.HttpClient$Response.getContent(HttpClient.java:405)
at org.openstreetmap.josm.tools.HttpClient$Response.getContentReader(HttpClient.java:441)
at org.openstreetmap.josm.tools.HttpClient$Response.fetchContent(HttpClient.java:452)
at org.openstreetmap.josm.tools.HttpClient$Response.debugRedirect(HttpClient.java:344)
at org.openstreetmap.josm.tools.Http1Client$Http1Response.<init>(Http1Client.java:133)
at org.openstreetmap.josm.tools.Http1Client.buildResponse(Http1Client.java:121)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:216)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:136)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.upload(UploadDataGui.java:227)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui$6.realRun(UploadDataGui.java:426)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:94)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:142)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)

2026-03-15 23:07:30.745 INFORMATION: POST https://josm.openstreetmap.de/josmticket (5,16 kB) ...
2026-03-15 23:07:31.728 INFORMATION: POST https://josm.openstreetmap.de/josmticket -> HTTP/1.1 200 (885 ms)
2026-03-15 23:07:31.972 INFORMATION: Öffne URL: https://josm.openstreetmap.de/josmticket?pdata_stored=691421098031efc24b45af7d
2026-03-15 23:08:25.604 INFORMATION: GET ​https://api.openstreetmap.org/.well-known/oauth-authorization-server -> HTTP/1.1 200 (162 ms; 444 B)

Attachments (1)

Bildschirmfoto vom 2026-03-15 23-07-12.png​ (32.6 KB ) - added by bielebog 8 months ago.

Download all attachments as: .zip

Change History (8)

comment:1 by HeinerSchaefer, 7 months ago

I have the same issue with JOSM v19555 and DirectUpload v36474.

Is there any workaround to get this fixed?

comment:2 by stoecker, 7 months ago

I have no time to care for plugins, but I'll accept a patch when provided.

comment:3 by HeinerSchaefer, 7 months ago

Because I have no idea about java, I can't help with this, sorry.
The only thing I can do is uploading the debug output from my console.

When I tried the first time a gpx upload, I've seen this messages:
Action.actionPerformed(UploadDataGuiPlugin.java:41)
2026-04-10 18:29:40.503 FEIN: 'gpxdraw::draw' in 6 ms beendet(segments= 3949, per 10000 = 15 ms)
2026-04-10 18:29:40.685 INFORMATION: POST ​https://api.openstreetmap.org/api/0.6/gpx/create (739 kB) ...
java.net.UnknownHostException: api.openstreetmap.org

at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:572)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
at java.base/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:178)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:533)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:638)
at java.base/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:266)
at java.base/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:380)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1262)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1148)
at java.base/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1479)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1442)
at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:220)
at org.openstreetmap.josm.tools.Http1Client.setupConnection(Http1Client.java:68)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:152)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:136)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.upload(UploadDataGui.java:227)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui$6.realRun(UploadDataGui.java:426)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:94)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:142)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)

2026-04-10 18:29:59.191 FEIN: org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.setVisible(false) from org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.buttonAction(UploadDataGui.java:521)

During all following tries I've seen this:
2026-04-10 18:44:05.817 FEIN: org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.setVisible(true) from org.openstreetmap.josm.plugins.DirectUpload.UploadDataGuiPlugin$UploadAction.actionPerformed(UploadDataGuiPlugin.java:41)
2026-04-10 18:44:08.531 INFORMATION: POST ​https://api.openstreetmap.org/api/0.6/gpx/create (739 kB) ...
2026-04-10 18:44:08.537 FEIN: 'gpxdraw::draw' in 9 ms beendet(segments= 3949, per 10000 = 22 ms)
2026-04-10 18:44:08.654 FEIN: REQUEST HEADERS: {Accept=*/*, Accept-Encoding=gzip, deflate, Authorization=Bearer vgAM4cqBUsboc8O89NAhEpfnLbd5G46ftVR_9gmIZSM, Connection=close, Content-Type=multipart/form-data; boundary=----------------------------d10f7aa230e8, Expect=}
2026-04-10 18:44:08.656 INFORMATION: POST ​https://api.openstreetmap.org/api/0.6/gpx/create -> HTTP/1.1 417 (1 ms; 19 B)
2026-04-10 18:44:08.656 FEIN: RESPONSE HEADERS: {null=[HTTP/1.1 417 Expectation Failed], Connection=[close], x-served-by=[cache-fra-etou8220198], content-type=[text/plain; charset=utf-8], Content-Length=[19]}
2026-04-10 18:44:08.656 FEIN: java.io.IOException: Server returned HTTP response code: 417 for URL: ​https://api.openstreetmap.org/api/0.6/gpx/create. Ursache: java.io.IOException: Server returned HTTP response code: 417 for URL: ​https://api.openstreetmap.org/api/0.6/gpx/create
org.openstreetmap.josm.gui.progress.ProgressException: Expected states are [IN_TASK] but current state is FINISHED

at org.openstreetmap.josm.gui.progress.AbstractProgressMonitor.checkState(AbstractProgressMonitor.java:84)
at org.openstreetmap.josm.gui.progress.AbstractProgressMonitor.subTask(AbstractProgressMonitor.java:136)
at org.openstreetmap.josm.io.StreamProgressUpdater.initProgressMonitor(StreamProgressUpdater.java:32)
at org.openstreetmap.josm.io.StreamProgressUpdater.<init>(StreamProgressUpdater.java:27)
at org.openstreetmap.josm.io.ProgressInputStream.<init>(ProgressInputStream.java:34)
at org.openstreetmap.josm.tools.HttpClient$Response.getContent(HttpClient.java:405)
at org.openstreetmap.josm.tools.HttpClient$Response.getContentReader(HttpClient.java:441)
at org.openstreetmap.josm.tools.HttpClient$Response.fetchContent(HttpClient.java:452)
at org.openstreetmap.josm.tools.HttpClient$Response.debugRedirect(HttpClient.java:344)
at org.openstreetmap.josm.tools.Http1Client$Http1Response.<init>(Http1Client.java:133)
at org.openstreetmap.josm.tools.Http1Client.buildResponse(Http1Client.java:121)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:216)
at org.openstreetmap.josm.tools.HttpClient.connect(HttpClient.java:136)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.upload(UploadDataGui.java:227)
at org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui$6.realRun(UploadDataGui.java:426)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.doRealRun(PleaseWaitRunnable.java:94)
at org.openstreetmap.josm.gui.PleaseWaitRunnable.run(PleaseWaitRunnable.java:142)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)

2026-04-10 18:44:11.166 FEIN: org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.setVisible(false) from org.openstreetmap.josm.plugins.DirectUpload.UploadDataGui.buttonAction(UploadDataGui.java:521)

Even stopping and starting JOSM didn't change this.
Maybe this helps someone to fix this.

comment:4 by HeinerSchaefer, 2 weeks ago

From the OSM API wiki
​https://wiki.openstreetmap.org/wiki/API_v0.6#GPS_traces
found this:
Create: POST /api/0.6/gpx
Also available at POST /api/0.6/gpx/create (deprecated)

The DirectUpload uses this command:
POST ​​https://api.openstreetmap.org/api/0.6/gpx/create
Which is deprecated.

Fixes the command
POST ​​https://api.openstreetmap.org/api/0.6/gpx
this issue?

Is there someone who knows how to change the code and test this?

comment:5 by HeinerSchaefer, 4 days ago

I looked into this with claude.ai and found the cause.

Cause

The request to https://api.openstreetmap.org/api/0.6/gpx/create is rejected with 417 Expectation Failed before it reaches the OSM application.
The debug log in comment:3 shows that DirectUpload sends an empty Expect header (Expect= in the request headers).
The 417 response has only 19 bytes and only a few headers (x-served-by: cache-...),
i.e. it comes from the caching layer in front of the API.

The header is set in UploadDataGui.setupConnection():

c.setHeader("Expect", "");

Reproduction without JOSM

$ curl -i -X POST -H "Expect;" https://api.openstreetmap.org/api/0.6/gpx/create
HTTP/2 417
content-type: text/plain; charset=utf-8
x-served-by: cache-dus1260020
content-length: 19

$ curl -i -X POST https://api.openstreetmap.org/api/0.6/gpx/create
HTTP/2 401
(...)

With the empty Expect header the request is rejected with 417, without it the server answers normally with 401 (missing authentication).
-H "Expect;" makes curl send the header with an empty value.

Proposed fix

The empty Expect header was probably meant to suppress 100-continue,
but the body is now sent as a complete byte array via setRequestBody(...), so it should not be needed.
Removing the line should be enough:

         c.setHeader("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
         c.setHeader("Connection", "close"); // counterpart of keep-alive
-        c.setHeader("Expect", "");
         return c;

I tested this in JOSM v19613.

comment:6 by stoecker, 4 days ago

Resolution: → fixed
Status: new → closed

In 36513/osm:

fix #24676 - patch by HeinerSchaefer - fix error on upload, add some ignores

comment:7 by stoecker, 4 days ago

In 36514/osm:

fix #24676 - patch by HeinerSchaefer - fix error on upload (release)

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain team.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.