直接Java与Grails的反思差异

时间:2012-07-20 02:34:55

标签: java grails reflection soap

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

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

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

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

  • 在Grails应用程序中,包含相同的Java代码,同一个地方 在代码调用中 com.springsource.loaded.ri.ReflectiveIntercepter然后经过 在弹簧加载的API中来回很多,它最终抛出一个 java.lang.reflect.InvocationTargetException。

对于如何让Grails中的反射行为与直接Java相同,是否有任何提示或想法?

我已经尝试了很多变化来达到这一点,我已经接近了绳子的尽头。理想情况下,最简单的方法是管理管理业务逻辑的Grails服务以及与这些内部系统通信的Java代码,因此我更愿意让所有内容(Grails和我的Java服务代码)协同工作。我简单地尝试构建我的服务代码的独立JAR及其所有依赖项,但在尝试在Grails中使用时,已经链接了依赖项冲突。我的最后一个选择是将我的Java服务与Grails服务中的业务逻辑分开,只需从Grails服务调用Java服务。这不太理想。

1 个答案:

答案 0 :(得分:1)

当你偶然发现答案时很容易......; - )

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

grails -noreloading run-app

这会阻止Grails / IDEA离开钩子以便动态重新加载类。

有没有想过这是Grails还是SpringSource Loader类中的错误?