package org.javarosa.xml.util;

import org.javarosa.core.services.locale.Localization;
import org.javarosa.core.util.NoLocalizedTextException;

/**
 * Invalid structure error that can _potentially_ be recovered from via
 * advanced user intervention. Useful for notifying the user that the issue lies
 * on the server.
 *
 * @author Phillip Mates (pmates@dimagi.com).
 */
public class ActionableInvalidStructureException extends InvalidStructureException {
    private String localizationKey;
    private String[] localizationParameters;

    public ActionableInvalidStructureException(String localizationKey,
                                                String[] localizationParameters,
                                                String message) {
        super(message);
        this.localizationKey = localizationKey;
        this.localizationParameters = localizationParameters;
    }

    @Override
    public String getLocalizedMessage() {
        if (localizationKey != null) {
            try {
                return Localization.get(localizationKey, localizationParameters);
            } catch (NoLocalizedTextException e) {
                return getMessage();
            }
        } else {
            return getMessage();
        }
    }
}

package org.javarosa.xml.util;

import org.javarosa.core.services.locale.Localization;

/**
 * Invalid structure error that can _potentially_ be recovered from via
 * advanced user intervention. Useful for notifying the user that the issue lies
 * on the server.
 *
 * @author Phillip Mates (pmates@dimagi.com).
 */
public class ActionableInvalidStructureException extends InvalidStructureException {
    private String localizationKey;
    private String[] localizationParameters;

    public ActionableInvalidStructureException(String localizationKey,
                                                String[] localizationParameters,
                                                String message) {
        super(message);
        this.localizationKey = localizationKey;
        this.localizationParameters = localizationParameters;
    }

    @Override
    public String getLocalizedMessage() {
        if (localizationKey != null) {
            return Localization.get(localizationKey, localizationParameters);
        } else {
            return getMessage();
        }
    }
}

--- 
+++ 
@@ -1,6 +1,7 @@
 package org.javarosa.xml.util;
 
 import org.javarosa.core.services.locale.Localization;
+import org.javarosa.core.util.NoLocalizedTextException;
 
 /**
  * Invalid structure error that can _potentially_ be recovered from via
@@ -24,7 +25,11 @@
     @Override
     public String getLocalizedMessage() {
         if (localizationKey != null) {
-            return Localization.get(localizationKey, localizationParameters);
+            try {
+                return Localization.get(localizationKey, localizationParameters);
+            } catch (NoLocalizedTextException e) {
+                return getMessage();
+            }
         } else {
             return getMessage();
         }
Add error handling for localization failures
