如何删除错误UnsupportedOperationException和可能的内存泄漏

时间:2013-05-16 10:52:55

标签: java web-services java-ee tomcat web-applications

我一直在寻找很多,但没有找到一个可以帮助我解决这个问题的完美的。 我有Web服务,并使用JAX-WS生成存根。 为了访问Web服务的方法,我得到了一个类,其中所有方法都是静态的,如

public static String getLocation()
{
 //call to the web service
}

我指定静态因为我想确认这不是我问题的根本原因。 现在当我检查Tomcat目录中的日志时,catilina日志显示了一些像这样的问题...当我启动或关闭tomcat服务器时出现此错误

Mar 18, 2010 11:13:07 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: stop: Stopping web application at '/testWeb'
Mar 18, 2010 11:13:07 PM org.apache.catalina.loader.WebappClassLoader    clearReferencesThreads
SEVERE: A web application appears to have started a thread named [leakingThread]  but  has failed to stop it. This is very likely to create a memory leak.

我看到的另一个错误是

SEVERE: Unable to determine string representation of value of type      [com.sun.xml.stream.writers.XMLStreamWriterImpl]
java.lang.UnsupportedOperationException
at com.sun.xml.stream.writers.XMLStreamWriterImpl.entrySet (XMLStreamWriterImpl.java:2134)
at java.util.AbstractMap.toString(AbstractMap.java:478)
at org.apache.catalina.loader.WebappClassLoader.clearThreadLocalMap(WebappClassLoader.java:2433)
at org.apache.catalina.loader.WebappClassLoader.clearReferencesThreadLocals(WebappClassLoader.java:2349)
at org.apache.catalina.loader.WebappClassLoader.clearReferences(WebappClassLoader.java:1921)
at org.apache.catalina.loader.WebappClassLoader.stop(WebappClassLoader.java:1833)
at org.apache.catalina.loader.WebappLoader.stop(WebappLoader.java:740)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4920)
at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:936)

请任何人帮我清除这些错误。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我的诊断:您在本地线程中有Map实现,此地图不支持由entrySet触发的操作Map#toString。确切地说,您的异常是从com.sun.xml.internal.stream.writers.XMLStreamWriterImplthis line of code抛出的。

清除本地线程的Tomcat代码很遗憾写入无条件地调用toString对象只是为了能够记录它们如果调试级别是 >。

如果你不能摆脱使用本地线程,你可能在解决这个问题时遇到一些麻烦。

顺便说一下,你的线程泄漏很可能是由于上述错误导致清理失败的结果。