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
相关产品推荐
相关产品推荐

