You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Liferay7.4 Kaleo工作流Groovy脚本无法解析HttpClient类异常咨询

Liferay 7.4 Kaleo工作流脚本HttpClient类找不到异常解决方案

错误根因

  • 抛出com.liferay.portal.kernel.scripting.ScriptingException的核心原因是:你脚本中引用的org.apache.commons.httpclient属于已经停止维护的Commons HttpClient 3.x系列API,Liferay 7.4运行环境默认没有内置该依赖包。
  • Liferay 7.x版本后工作流脚本由全局类加载器加载,不再支持通过liferay-plugin-package.properties配置插件私有依赖供脚本调用,因此配置文件声明依赖的方式完全无效。

可选解决方案

方案1:替换为Liferay内置HTTP实现(推荐,无需额外部署Jar)

该方案不需要引入任何外部依赖,直接修改脚本使用JDK/Liferay内置的HTTP客户端即可,从根源避免Jar版本冲突问题,示例实现如下:

import java.net.URI
import java.net.URLEncoder
import java.net.http.HttpClient
import java.net.http.HttpRequest
import java.net.http.HttpResponse
import java.util.Base64

String twilioHost = 'api.twilio.com'
String apiID = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
String apiPass = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
String requestUrl = "https://${twilioHost}/2008-08-01/Accounts/${apiID}/SMS/Messages"

// 构造Basic认证头
String auth = Base64.getEncoder().encodeToString("${apiID}:${apiPass}".getBytes())

// 构造表单参数
String formBody = [
    'IfMachine': 'Continue',
    'From': '[YourNumber]',
    'To': parameters.phoneNumber,
    'Body': 'This is an SMS from Axeda'
].collect { k, v -> "${URLEncoder.encode(k, 'UTF-8')}=${URLEncoder.encode(v, 'UTF-8')}" }.join('&')

HttpClient client = HttpClient.newHttpClient()
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(requestUrl))
    .header("Authorization", "Basic ${auth}")
    .header("Content-Type", "application/x-www-form-urlencoded")
    .POST(HttpRequest.BodyPublishers.ofString(formBody))
    .build()

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString())
// 可按需增加响应状态校验、异常捕获逻辑

方案2:部署3.x版本HttpClient依赖到全局目录

如果必须保留原有Commons HttpClient 3.x的代码逻辑,按以下步骤操作:

  • 准备合规依赖包:下载commons-httpclient-3.1.jar,注意必须为3.x版本,4.x及以上版本包名为org.apache.http,和你脚本中的导入路径不匹配。
  • 部署路径:将Jar包放入Liferay安装目录下的${liferay.home}/tomcat/lib/ext目录(使用默认Tomcat捆绑包时的全局类加载目录,其他应用服务器对应放全局lib目录即可)。
  • 操作完成后重启Liferay服务,脚本即可正常加载到所需类。

注意:不要将Jar放在自定义模块、站点的WEB-INF/lib路径下,工作流脚本执行时使用全局类加载器,无法读取应用私有目录下的依赖。

额外优化建议

  • 脚本中硬编码的Twilio密钥、发送号码等敏感信息不建议直接写在Kaleo工作流XML中,可通过Liferay系统配置、工作流上下文传参的方式注入,降低敏感信息泄露风险。
  • 建议补充HTTP请求异常捕获、响应状态码校验逻辑,避免Twilio接口调用异常时直接中断整个工作流流程。

内容的提问来源于stack exchange,提问作者Mariyam El Qemary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 05:31:08