diff --git a/main/src/com/google/refine/model/recon/StandardReconConfig.java b/main/src/com/google/refine/model/recon/StandardReconConfig.java index f1cb97d3b..07506002f 100644 --- a/main/src/com/google/refine/model/recon/StandardReconConfig.java +++ b/main/src/com/google/refine/model/recon/StandardReconConfig.java @@ -111,8 +111,13 @@ public class StandardReconConfig extends ReconConfig { } JSONObject t = obj.has("type") && !obj.isNull("type") ? obj.getJSONObject("type") : null; - - int limit = obj.has("limit") && !obj.isNull("limit") ? obj.getInt("limit") : 0; + + int limit; + try { + limit = obj.has("limit") && !obj.isNull("limit") ? obj.getInt("limit") : 0; + } catch(JSONException e) { + limit = 0; + } return new StandardReconConfig( obj.getString("service"), diff --git a/main/tests/server/src/com/google/refine/tests/model/ReconTests.java b/main/tests/server/src/com/google/refine/tests/model/ReconTests.java index 5d6466c99..f9a92607c 100644 --- a/main/tests/server/src/com/google/refine/tests/model/ReconTests.java +++ b/main/tests/server/src/com/google/refine/tests/model/ReconTests.java @@ -53,7 +53,7 @@ public class ReconTests extends RefineTest { * @throws Exception */ @Test - public void limitJSONKeyTest() throws Exception { + public void limitJSONKeyAsIntTest() throws Exception { JSONObject obj = new JSONObject( " {\n" + " \"mode\": \"standard-service\",\n" + @@ -74,4 +74,35 @@ public class ReconTests extends RefineTest { // Assert the object is created Assert.assertTrue(config != null); } + + /** + * Regression for issue #1526: + * the UI used to send an empty limit as an empty string, which + * failed to be parsed by the backend. + * @throws Exception + */ + @Test + public void limitJSONKeyAsEmptyStringTest() throws Exception { + JSONObject obj = new JSONObject( + " {\n" + + " \"mode\": \"standard-service\",\n" + + " \"service\": \"https://tools.wmflabs.org/openrefine-wikidata/en/api\",\n" + + " \"identifierSpace\": \"http://www.wikidata.org/entity/\",\n" + + " \"schemaSpace\": \"http://www.wikidata.org/prop/direct/\",\n" + + " \"type\": {\n" + + " \"id\": \"Q13442814\",\n" + + " \"name\": \"scientific article\"\n" + + " },\n" + + " \"autoMatch\": true,\n" + + " \"columnDetails\": [],\n" + + " \"limit\": \"\"\n" + + " }"); + + ReconConfig config = StandardReconConfig.reconstruct(obj); + + // Assert the object is created + Assert.assertTrue(config != null); + } + + }