首页 > 解决方案 > 在 Mule 4 中调用 groovy 方法

问题描述

我已经使用 JPA 存储库构建了一个完整的 groovy 项目,用于数据持久性操作。现在我想从 Mule 4 中的脚本调用方法,而不更改 groovy 项目中的任何内容。

例如。CustomerService.groovy(伪代码)

import com.example.dao.CustomerDao.groovy
... other imports...

@Service
class CustomerService {
@Autowired
CustomerDao cDao

@Transactional
publid Customer createCustomer(Customer customer) {
    return cDao.save(customer)
}

... other methods...
}

CustomerDao.groovy

import spring.JPA  (the original import path may vary)

@Repository
class CustomerDao implements JPARepository<Customer, Integer> {
}

该项目在 Mule 3 中运行。在 Mule 3 中,我们有一个 Invoke 组件,可用于调用 groovy 脚本中的方法。Mule 4 Invoke 组件只兼容 Java 而不是 groovy。

脚本模块的“执行”组件可以调用 groovy 脚本,但不确定如何调用该方法。Mule 4中是否有任何解决方法?

目前出现的问题

  1. 在“执行”组件中,如果我导入另一个文件,则会收到错误消息
Unalbe to resolve class com.example.dao.CustomerDao
@ line 3 column 1,
import com.example.dao.CustomerDao.groovy
^

找到了类似问题的解决方案https://help.mulesoft.com/s/article/Compilation-exception-in-Mule4-x-when-using-Groovy-script-with-Import-statement但无法实现。

在文章中,他的开发人员遇到了 apache 依赖项的问题,他/她可以从 mvn repo 获得。我正在尝试导入我开发的 groovy 文件。因此无法将其添加到依赖项中。我尝试在本地仓库中添加 groovy 项目并获取它,但它没有用。此外,当这个 Mule 4 应用程序部署在 CloudHub 上时,它会出现问题,因为它无法访问我的本地存储库。

需要一个解决方案来向 Mule 4 添加一个 spring-groovy 项目

谢谢 :)

标签: groovymule4

解决方案


问题是脚本模块执行的 Groovy 脚本试图导入一个不在 Java 的类路径中的类。所以它会抛出错误。该类位于另一个 Groovy 源文件中。您可以做的是将 Groovy 代码编译成实际的 Java 类。您可以尝试使用Groovy 文档中描述的一种方法,将 Maven 插件与您的 Mule 应用程序 pom.xml 文件集成。

如果您有大量 Groovy 类,另一种选择是创建一个单独的项目来构建 Jar 库,然后使用您提到的知识库文章中的解决方案。


推荐阅读