在尝试将项目部署到Websphere时,我遇到了一个非常具体的问题,该项目在单个EAR中打包了多个WAR。第一个WAR是基于SOAP的Web服务,第二个WAR是基于REST的服务。除了共享一个公共构建pom.xml之外,这两个项目都不相互依赖。
我遇到的问题是基于在REST服务中使用Jackson库来处理JSON对象。无论出于何种原因,默认情况下Jackson Websphere的版本都会引发NoSuchMethod
错误。这显然是一个常见问题,并且将应用程序切换为使用父级最后一个类加载器来解决它,之后REST服务正常工作。
不幸的是,SOAP服务在使用父级最后一个类加载器时不起作用,在尝试加载其中一个bean时抛出错误。我花了最近几天试图让这两个应用程序发挥得很好,但还没有成功。
解决问题的一个理想解决方案是通常使用REST服务,尤其是Jackson,以使用父级优先级类加载器。一个不太理想的解决方案是改变SOAP服务以使用父级最后一个加载器。难以为继的解决方案包括将应用程序拆分为单独的包,或者使用Jackson以外的其他方式来处理JSON对象。
由于我公司的限制,我只能使用1.9.13及以下版本的Jackson(目前使用1.9.9版本)和Websphere Application Server v 8.0.0.8