瀏覽代碼

Merge pull request #13030 from wangkx/h22470

HPCC-22470 Add option to return error messages as TEXT

Reviewed-By: Anthony Fishbeck <anthony.fishbeck@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 5 年之前
父節點
當前提交
aacae36908

+ 20 - 0
esp/bindings/http/platform/httptransport.cpp

@@ -2498,6 +2498,22 @@ StringBuffer &toJSON(StringBuffer &json, IMultiException *me, const char *callba
     return json;
 }
 
+StringBuffer &toText(StringBuffer &content, IMultiException *me)
+{
+    IArrayOf<IException> &exs = me->getArray();
+    content.append("Exceptions: \n");
+    content.append("  Source: ").append(me->source()).append("\n");
+    ForEachItemIn(i, exs)
+    {
+        IException &e = exs.item(i);
+        StringBuffer msg;
+        content.append("  Exception: \n");
+        content.append("    Code: ").append(e.errorCode()).append("\n");
+        content.append("    Message: ").append(e.errorMessage(msg)).append("\n");
+    }
+    return content;
+}
+
 bool CHttpResponse::handleExceptions(IXslProcessor *xslp, IMultiException *me, const char *serv, const char *meth, const char *errorXslt)
 {
     IEspContext *context=queryContext();
@@ -2519,6 +2535,10 @@ bool CHttpResponse::handleExceptions(IXslProcessor *xslp, IMultiException *me, c
             setContentType(HTTP_TYPE_APPLICATION_XML);
             me->serialize(content);
             break;
+        case ESPSerializationTEXT:
+            setContentType(HTTP_TYPE_TEXT_PLAIN);
+            toText(content, me);
+            break;
         case ESPSerializationANY:
         default:
             {

+ 2 - 1
esp/scm/esp.ecm

@@ -52,7 +52,8 @@ typedef enum ESPSerializationFormat_
     ESPSerializationANY,
     ESPSerializationXML,
     ESPSerializationJSON,
-    ESPSerializationCSV
+    ESPSerializationCSV,
+    ESPSerializationTEXT
 } ESPSerializationFormat;
 
 typedef enum AuthType_

+ 8 - 0
esp/scm/ws_workunits.ecm

@@ -43,6 +43,13 @@ ESPenum EclDefinitionActions : string
     Publish("Publish"),
 };
 
+ESPenum ErrorMessageFormat : string
+{
+    XML("xml"),
+    JSON("json"),
+    Text("text")
+};
+
 ESPStruct [nil_remove] ECLException
 {
     string Source;
@@ -898,6 +905,7 @@ ESPrequest WULogFileRequest
     [min_ver("1.38")] string LogDate;
     [min_ver("1.38")] int SlaveNumber(1);
     [min_ver("1.55")] int64 SizeLimit(0);
+    [min_ver("1.77")] ESPenum ErrorMessageFormat ErrorMessageFormat;
     string PlainText;
 };
 

+ 7 - 0
esp/services/ws_workunits/ws_workunitsService.cpp

@@ -3083,6 +3083,13 @@ bool CWsWorkunitsEx::onWUFile(IEspContext &context,IEspWULogFileRequest &req, IE
     }
     catch(IException* e)
     {
+        CErrorMessageFormat errorMessageFormat = req.getErrorMessageFormat();
+        if (errorMessageFormat == CErrorMessageFormat_XML)
+            context.setResponseFormat(ESPSerializationXML);
+        else if (errorMessageFormat == CErrorMessageFormat_JSON)
+            context.setResponseFormat(ESPSerializationJSON);
+        else if (errorMessageFormat == CErrorMessageFormat_Text)
+            context.setResponseFormat(ESPSerializationTEXT);
         FORWARDEXCEPTION(context, e,  ECLWATCH_INTERNAL_ERROR);
     }
     return true;