问题与此处描述的完全相同:

Exception java.util.zip.ZipFile.ensureOpenOrZipException with WAS 7

根据解决方案,我将应用程序模块更改为2.4,它解决了该问题。我没有按照决议中所述更改wsdl的路径。但是,一旦更改了应用程序模块,就不会生成webservices.xml文件。我需要生成xml文件。

在不需要更改应用程序模块的情况下,对于此问题有其他替代解决方案的人吗?

问候,

最佳答案

您所指的原始问题有两个部分。一是关于ZIPException。由于该异常是在WebSphere代码中深入触发的,因此您不太可能在此找到解决该问题的解决方案。您应该为此联系IBM支持。另一部分是关于内存问题。根据我使用部署在WebSphere上的JAX-WS服务(以及通常使用WebSphere)的经验,我可以提出两个建议:


最初的问题是该问题在“几次部署后”发生。这很容易导致类加载器泄漏。类加载器泄漏是一种特殊的内存泄漏,它可以防止应用程序的旧类加载器在重新部署或重新启动应用程序后被垃圾回收(有关详细说明,请参见here)。这可能是由应用程序或服务器运行时引起的。经验表明,WebSphere本身有几个导致这种类型泄漏的问题,而IBM通常在解决这些问题方面效率不高。我曾经编译过我遇到的这种类型的已知WebSphere问题的列表。它已发布here。可以看到,基本上任何复杂的Java EE应用程序都会受到此类问题的影响。因此,您应该为以下事实做好准备:频繁重新部署而不重新启动服务器时,它最终将耗尽内存。

注意:为捍卫IBM,应该说其他应用程序服务器不一定在这方面表现更好。
在一种特殊情况下,部署在WebSphere上的JAX-WS服务可能会意外地消耗大量内存。对于使用自顶向下方法开发的服务(即,从WSDL开始),但具有@WebService注释的注释并不引用原始WSDL。在那种情况下,WebSphere(完全正确)认为它们是自底向上的服务,并基于JAX-WS / JAXB2注释生成WSDL和XML Schema文档。这些文档被保留在内存中,在某些情况下(尤其是对于复杂服务而言)可能比原始WSDL和XML Schema文档大得多。我曾经见过一个应用程序为此消耗200 MB的堆。为避免这种情况,请确保在创建自上而下的JAX-WS服务时,将原始WSDL和XML Schema文档打包在应用程序中,并且服务实现具有正确引用这些文档的@WebService批注。

09-10 08:49
查看更多