HCL Nomad Web运行LotusScript调用Java Agent报响应内容类型不支持
问题原因分析
- HCL Nomad Web的
NotesHTTPRequest类实现逻辑与桌面端HCL Notes存在差异:桌面端对HTTP响应格式的校验宽松,即便响应格式不符合规范也能正常解析;但Nomad Web底层基于浏览器Fetch API封装,对HTTP响应格式的校验严格度大幅提升。 - 当前Java Agent的输出不符合标准HTTP响应格式:HTTP协议要求响应头和响应体之间必须用一个单独的空行分隔,现有代码在输出
Content-Type头之后直接输出了响应内容,缺少分隔空行,导致Nomad Web无法正确识别内容类型,抛出不支持错误。 - 旧版本Nomad Web还存在默认Accept头限制的问题:未显式设置Accept头时,部分旧版本仅默认支持
application/json等少数内容类型,text/plain不在默认接收列表中。
解决方案
Java Agent侧修改(必改)
在输出Content-Type头后新增一个空行作为响应头、体的分隔,符合HTTP标准格式,修改后代码如下:
try { this.output = this.getAgentOutput(); output.println("Content-Type: text/plain; charset=utf-8"); // 新增空行分隔响应头与响应体 output.println(); output.println("ABCDEFGH"); } finally { output.flush(); output.close(); }
如果需要更强的版本兼容性,也可以将Content-Type改为application/json; charset=utf-8,同时将返回的字符串内容用双引号包裹,该类型在所有Nomad Web版本中均支持。
LotusScript侧修改(可选,适配旧版本Nomad)
如果修改Java Agent后仍有报错,可以在发送请求前显式设置Accept头,明确告知服务端可接收的内容类型:
Set webRequest = session.CreateHTTPRequest() webRequest.preferstrings = True ' 新增Accept头设置,允许接收text/plain格式响应 Call webRequest.SetRequestHeader("Accept", "text/plain, */*") serverResponse = webRequest.post(serverUrl, jsonPayload)
效果说明
上述修改后即可解决HTTP Response content type unsupported报错,修改后的逻辑同时兼容桌面端HCL Notes与HCL Nomad Web,不会影响原有功能。
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

