[英]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.