纯Java和Grails之间的反射差异

纯Java和Grails之间的反射差异,java,grails,reflection,soap,Java,Grails,Reflection,Soap,我正在使用公司内部开发的一组API与组织中的一些公共中央服务进行通信。可以通过运行时配置动态配置API,以根据系统需要使用多个传输协议 内部API集合耦合到IBM WebService ThincClient.jar,以配置和调用所有必要的web服务。我让独立原型顺利工作,但需要将功能集成到Grails中正在开发的其他几个服务中 这就是事情破裂的地方。在我编写的代码中,我们只需调用一个工厂方法,并使用它来获得一个客户机会话,然后继续我们的业务逻辑。简单。通过使用调试器并深入研究APIgetCli

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

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

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

  • 在纯Java单机版中,这将绑定到
    com.ibm.ws.webservice.engine.client.Service
    initService()
    方法被调用,事情按预期进行

  • 在Grails应用程序中,包含相同的Java代码,位置相同 在代码中调用
    com.springsource.load.ri.reflectiveIntercept
    然后在 在spring-loaded 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中的bug还是SpringSource加载程序类中的bug,您有什么想法吗?

当您无意中找到答案时,很容易…;-)

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

grails -noreloading run-app
这就阻止了Grails/IDEA离开钩子来动态地重新加载类

对于这是Grails中的bug还是SpringSource加载程序类中的bug,有什么想法吗