在改进Java应用程序方面,我们现在面临着从Axis到Jax-WS的迁移。
当前,我们遇到以下问题:在我们生成的服务类(继承自javax.xml.ws.Service
)中,有一个对Service#getPort
的调用
@WebEndpoint(name = "SomeServiceSoap")
public SomeServiceSoap getSomeServiceSoap() {
return super.getPort(new QName("http://something", "SomeServiceSoap"), SomeServiceSoap.class);
}
每次我们要在此服务上执行方法时都会调用此方法。但是,在测试中,它会导致permgen中的OOM。
我是否应该避免通过为返回的对象创建缓存/池或其他存储而多次调用它?还是我错过了此实现的其他一些重要功能。
最佳答案
尽管我没有发现jax-ws实现是如何执行此令人讨厌的技巧的,但我发现为了避免问题,我需要从版本2.2.6
更改jaxws-rt(在我们的pom文件中使用了该版本,但几乎两岁)到2.2.8
。
此库版本更改完全解决了该问题。我已经在Java 6和Java 7中对其进行了测试。