【问题标题】:How to remove errors UnsupportedOperationException and Possible memory leak如何删除错误 UnsupportedOperationException 和可能的内存泄漏
【发布时间】:2013-05-11 05:35:39
【问题描述】:

我已经搜索了很多,但没有找到一个可以帮助我解决这个问题的完美解决方案。 我有 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)

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

【问题讨论】:

  • “和可能的内存泄漏”在我的问题中的文本上下文中。
  • 好吧——我的错。在@MarkoTopolnik 的带领下 - 将其作为一个问题。
  • 谢谢马尔科...你能帮忙解决这个异常吗..我搜索了很多..但是....:(

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


【解决方案1】:

我的诊断:你在一个线程本地有一个Map实现,而这个映射不支持entrySet操作,它是由Map#toString触发的。准确地说,您的异常是从this line of code 中的com.sun.xml.internal.stream.writers.XMLStreamWriterImpl 引发的。

很遗憾,Tomcat 清除本地线程的代码被写入无条件在对象上调用toString 只是为了能够在调试级别打开时记录它们

如果您不能为此使用线程本地,则解决此问题可能会遇到一些麻烦。

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

【讨论】:

  • 马尔科。我认为你是正确的。我正在使用 Map 来设置会话变量……比如“private Map session = null;”它向我显示添加参数的警告。添加参数会解决我的问题吗?
  • 这不是线程本地的。你在使用ThreadLocal 对象吗?它也可能在您的 WS 框架内部使用,这很难说。编译器抱怨泛型类型Map 的类型参数。完全不相关。
  • 它与 JAX-WS 相关。 Map 类是com.sun.xml.stream.writers.XMLStreamWriterImpl
  • 抱歉给您添麻烦了,Marko...但是我该如何解决...在我的动作类中,我正在使用 java.util.Map
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
相关资源
最近更新 更多