Avoid returning 'null[]' after unhandled exceptions

Some exceptions that bubble to the top do not have messages,
so this stops those exceptions from causing 'null []' to be returned
to the user. Instead the class of the exception and a default error
message are shown when there is no other message to show from
the exception.

Change-Id: I44d856e5c4600f0a1606971ade8fbc0b0bb46a88
Reviewed-on: http://fulliautomatix.ics.uci.edu:8443/190
Reviewed-by: Chris Hillery <ceej@lambda.nu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java b/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
index 1900d50..f558eb6 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
@@ -251,18 +251,15 @@
      */
     private static String extractErrorMessage(Throwable e) {
         Throwable cause = getRootCause(e);
-
-        String exceptionClassName = "";
-        String[] messageSplits = cause.toString().split(":");
-        if (messageSplits.length > 1) {
-            String fullyQualifiedExceptionClassName = messageSplits[0];
-            System.out.println(fullyQualifiedExceptionClassName);
-            String[] hierarchySplits = fullyQualifiedExceptionClassName.split("\\.");
-            if (hierarchySplits.length > 0) {
-                exceptionClassName = hierarchySplits[hierarchySplits.length - 1];
-            }
+        String fullyQualifiedExceptionClassName = cause.getClass().getName();
+        String[] hierarchySplits = fullyQualifiedExceptionClassName.split("\\.");
+        //try returning the class without package qualification
+        String exceptionClassName = hierarchySplits[hierarchySplits.length - 1];
+        String localizedMessage = cause.getLocalizedMessage();
+        if(localizedMessage == null){
+            localizedMessage = "Internal error. Please check instance logs for further details.";
         }
-        return cause.getLocalizedMessage() + " [" + exceptionClassName + "]";
+        return localizedMessage + " [" + exceptionClassName + "]";
     }
 
     /**
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
index 71d41fc..c02b23a 100644
--- a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
@@ -2145,7 +2145,7 @@
                                           "' in dataverse '" + dataverse + "'", e);
         }
         if (type == null) {
-            throw new AlgebricksException("Type name '" + typeName + " unknown in dataverse '" + dataverse +"'");
+            throw new AlgebricksException("Type name '" + typeName + "' unknown in dataverse '" + dataverse +"'");
         }
         return type.getDatatype();
     }