From 8ac156376dd2feb43f4ed0b8d6bd19f1536b3d01 Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Mon, 29 Jun 2015 15:00:14 +0930 Subject: [PATCH] Fix MeshMS Java API when MeshMS disabled If the MeshMS REST API is disabled, then the JSON response omits the MeshMS status code, so the Java client API now handles this case. --- .../servaldna/meshms/MeshMSCommon.java | 24 ++++++++++++------- tests/meshmsjava | 7 ++++-- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/java/org/servalproject/servaldna/meshms/MeshMSCommon.java b/java/org/servalproject/servaldna/meshms/MeshMSCommon.java index 099f0f0c..b1df77a4 100644 --- a/java/org/servalproject/servaldna/meshms/MeshMSCommon.java +++ b/java/org/servalproject/servaldna/meshms/MeshMSCommon.java @@ -80,15 +80,18 @@ public class MeshMSCommon json.consume("http_status_message"); json.consume(JSONTokeniser.Token.COLON); status.http_status_message = json.consume(String.class); - json.consume(JSONTokeniser.Token.COMMA); - json.consume("meshms_status_code"); - json.consume(JSONTokeniser.Token.COLON); - status.meshms_status_code = MeshMSStatus.fromCode(json.consume(Integer.class)); - json.consume(JSONTokeniser.Token.COMMA); - json.consume("meshms_status_message"); - json.consume(JSONTokeniser.Token.COLON); - status.meshms_status_message = json.consume(String.class); - json.consume(JSONTokeniser.Token.END_OBJECT); + Object tok = json.nextToken(); + if (tok == JSONTokeniser.Token.COMMA) { + json.consume("meshms_status_code"); + json.consume(JSONTokeniser.Token.COLON); + status.meshms_status_code = MeshMSStatus.fromCode(json.consume(Integer.class)); + json.consume(JSONTokeniser.Token.COMMA); + json.consume("meshms_status_message"); + json.consume(JSONTokeniser.Token.COLON); + status.meshms_status_message = json.consume(String.class); + tok = json.nextToken(); + } + json.match(tok, JSONTokeniser.Token.END_OBJECT); json.consume(JSONTokeniser.Token.EOF); return status; } @@ -99,6 +102,9 @@ public class MeshMSCommon protected static void throwRestfulResponseExceptions(Status status, URL url) throws MeshMSException, ServalDFailureException { + if (status.meshms_status_code == null) { + throw new ServalDFailureException("missing meshms_status_code from " + url); + } switch (status.meshms_status_code) { case OK: case UPDATED: diff --git a/tests/meshmsjava b/tests/meshmsjava index 651bec8f..4005db70 100755 --- a/tests/meshmsjava +++ b/tests/meshmsjava @@ -49,14 +49,17 @@ set_extra_config() { : } -doc_MeshmsDisabled="Java API failure when rhizome is disabled" +doc_MeshmsDisabled="Java API fails when rhizome is disabled" setup_MeshmsDisabled() { setup executeOk_servald config set rhizome.enable off sync } test_MeshmsDisabled() { - executeJavaOk org.servalproject.test.Meshms meshms-list-conversations $SIDA1 + executeJava org.servalproject.test.Meshms meshms-list-conversations $SIDA1 tfw_cat --stdout --stderr + assertExitStatus != 0 + assertStderrGrep ServalDFailureException + assertStderrGrep --ignore-case 'missing meshms_status_code' } doc_MeshmsListConversations="Java API list MeshMS conversations"