繁体   English   中英

纯Java和Grails之间的反射差异

[英]Reflection Difference Between Straight Java and Grails

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

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

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

  • 然后在纯Java独立服务器中,将其绑定到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服务的调用。 这不理想。

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

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

grails -noreloading run-app

这样可以阻止Grails / IDEA离开钩子以即时重新加载类。

是否对Grails或SpringSource Loader类中的错误有任何想法?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM