1

我正在使用我公司内部开发的一组 API 与组织中的一些常见中心服务进行通信。API 可以通过运行时配置动态配置,以根据系统需要使用多种传输协议。

内部 API 的集合与 IBM WebService thinclient.jar 耦合,以配置和调用所有必要的 Web 服务。我让独立原型顺利运行,但需要将该功能集成到 Grails 中正在开发的其他几个服务中。

这就是事情分崩离析的地方。在我编写的代码中,我们只是调用一个工厂方法并使用它来获取客户端会话,然后继续执行我们的业务逻辑。简单的。使用调试器并深入研究 APIgetClient()调用,我可以看到它获得了通用传输配置,然后将其绑定到 SOAP 传输配置。从这里开始,路径会有所不同,无论是纯独立 Java 服务还是在 Grails 应用程序中运行的服务。

  • 在纯 Java 独立版中,这将绑定到 com.ibm.ws.webservice.engine.client.Service调用 initService()方法并且事情按预期工作的地方。

  • 在 Grails 应用程序中,包含相同的 Java 代码,在代码调用的相同位置, com.springsource.loaded.ri.ReflectiveIntercepter然后在 spring-loaded API 中反复多次后,它最终抛出 java.lang.reflect.InvocationTargetException。

有没有人有关于如何让 Grails 中的反射行为与直接 Java 中相同的任何提示或想法?

我已经尝试了很多变化来达到这一点,我已经接近了我的绳索的尽头。理想情况下,管理我们的业务逻辑的 Grails 服务和与这些内部系统对话的 Java 代码一起管理是最容易的,所以我更愿意让所有东西(Grails 和我的 Java 服务代码)一起工作。我曾短暂尝试为我的服务代码及其所有依赖项构建一个独立的 JAR,但在尝试在 Grails 中使用它时出现了链式依赖项冲突。我的最后一个选择是将我的 Java 服务与 Grails 服务中的业务逻辑分开,只从 Grails 服务调用 Java 服务。这不太理想。

4

1 回答 1

1

当您偶然发现答案时,这很容易...... ;-)

如果我在 IDEA 中将运行配置设置为使用-noreloading选项,Grails 服务将按预期运行。

grails -noreloading run-app

这会阻止 Grails/IDEA 留在钩子中以动态重新加载类。

关于这是否是 Grails 或 SpringSource Loader 类中的错误有什么想法吗?

于 2012-07-20T15:58:01.093 回答