Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 5634)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 5635)
@@ -25,4 +25,5 @@
 import java.util.HashMap;
 
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
 
@@ -40,4 +41,5 @@
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 import org.xml.sax.helpers.DefaultHandler;
 
@@ -216,7 +218,12 @@
         cancel = false;
         try {
-            String s = new CapabilitiesCache(monitor, fastFail).updateIfRequiredString();
-            InputSource inputSource = new InputSource(new StringReader(s));
-            SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new CapabilitiesParser());
+            CapabilitiesCache cache = new CapabilitiesCache(monitor, fastFail);
+            try {
+                initializeCapabilities(cache.updateIfRequiredString());
+            } catch (SAXParseException parseException) {
+                // XML parsing may fail if JOSM previously stored a corrupted capabilities document (see #8278)
+                // In that case, force update and try again
+                initializeCapabilities(cache.updateForceString());
+            }
             if (capabilities.supportsVersion("0.6")) {
                 version = "0.6";
@@ -261,4 +268,9 @@
             throw new OsmApiInitializationException(e);
         }
+    }
+    
+    private void initializeCapabilities(String xml) throws SAXException, IOException, ParserConfigurationException {
+        InputSource inputSource = new InputSource(new StringReader(xml));
+        SAXParserFactory.newInstance().newSAXParser().parse(inputSource, new CapabilitiesParser());
     }
 
