Liferay 7.4 Rest Builder模块部署失败:TransformUtil编译错误
问题原因及解决方案:Liferay 7.4 Rest Builder编译错误(TransformUtil参数不匹配)
问题原因
- Rest Builder生成的
BaseUsuarioResourceImpl代码自动引用了Liferay已废弃的com.liferay.portal.kernel.util.TransformUtil类,而Liferay 7.4中该类的transform和transformToArray方法签名已变更,生成代码的参数调用方式与新方法不兼容,直接触发编译失败。 - 本质是Rest Builder的默认模板未同步Liferay 7.4的API更新,仍在使用旧版
TransformUtil的方法调用逻辑。
解决方案
1. 手动替换废弃工具类,改用Stream API实现转换
找到BaseUsuarioResourceImpl中使用TransformUtil的代码块,替换为Java Stream API的实现:
- 列表转换示例:
原代码:
替换后:List<Usuario> usuarios = ...; List<UsuarioDTO> usuarioDTOs = TransformUtil.transform(usuarios, usuario -> toUsuarioDTO(usuario));List<Usuario> usuarios = ...; List<UsuarioDTO> usuarioDTOs = usuarios.stream() .map(this::toUsuarioDTO) .collect(Collectors.toList()); - 数组转换示例:
原代码:
替换后:UsuarioDTO[] usuarioDTOs = TransformUtil.transformToArray(usuarios, usuario -> toUsuarioDTO(usuario), UsuarioDTO.class);UsuarioDTO[] usuarioDTOs = usuarios.stream() .map(this::toUsuarioDTO) .toArray(UsuarioDTO[]::new);
替换后记得删除TransformUtil的导入语句,按需添加java.util.stream.Collectors的导入。
2. 调整Rest Builder模板(避免后续生成重复问题)
如果需要后续执行blade gw buildREST时不再生成错误代码,可修改模块内的Rest Builder模板:
- 进入模块目录下的
src/main/resources/META-INF/rest-builder/templates - 找到包含
TransformUtil调用的模板文件(通常是资源实现类的模板) - 将模板中的
TransformUtil相关代码替换为Stream API实现,保存后重新执行blade gw buildREST即可生成兼容代码。
3. 重新编译部署
执行以下命令清理缓存并重新部署:
blade gw clean build deploy
内容的提问来源于stack exchange,提问作者Dimas Travieso
相关产品推荐
相关产品推荐

