我在Websphere上部署了JAVA应用程序。该应用程序正在寻找本地WSDL文件来执行SOAP请求。但是,每当Websphere按夜间计划重新启动时,此行以下内容将抛出NullPointer,因为它找不到WSDL的路径。当我们循环JVM时,一切正常,直到下一次重新启动为止。
Url baseUrl = MyJavaClass.class.getClassLoader().getResource("MyInterface.wsdl");
稍后,我将需要此baseUrl来继续执行我的SOAP请求。
service = new ServiceInstance(baseUrl, new QName("http://myinterface.blah","ServiceInstance"));
当然,baseUrl
为Null会引发错误。但是,一旦JVM循环,一切正常,直到它再次随机中断。我的src/main/resources
文件夹中有WSDL,将其设置为Source文件夹。
以下是在Websphere中设置我的classLoading选项以使其工作的方式。我尝试了其他所有失败的可能性。
有任何想法吗?
答案 0 :(得分:0)
我不确定,但是...如果在JVM回收中没有发生这种情况,但是在重新启动时发生了,这暗示着某些文件在重新启动时丢失了。
在大多数非Windows平台上,临时目录都安装在内存支持的存储上,这就是为什么/tmp
之类的目录内容在重新启动时会被丢弃的原因。
WebSphere保留已编译WSDL工件的高速缓存。它将它们保存在配置文件目录中名为wstemp
的目录中。 (尽管我不确定)wstemp
可能持有指向/tmp
中文件的指针。在这种情况下,重新启动肯定会导致您的问题。
(或者,也许您的系统管理员进行了配置更改,其中wstemp
目录本身指向内存支持的存储?)
您可以尝试的方法是:下次机器重新引导时,在重新启动WebSphere之前,请完全删除wstemp
目录。然后尝试您的应用程序。如果它有效,则意味着我在上面写的内容有些道理。如果没有,那么也许是时候与IBM一起打开PMR了。