当Spring尝试创建AnnotationMethodHandlerAdapter时,WebSphere中的XSLT ClassCastException
启动WebSphere时,我遇到以下异常:当Spring尝试创建AnnotationMethodHandlerAdapter时,WebSphere中的XSLT ClassCastException,spring,xslt,spring-mvc,websphere,classcastexception,Spring,Xslt,Spring Mvc,Websphere,Classcastexception,启动WebSphere时,我遇到以下异常: Could not instantiate bean class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]: Constructor threw exception; nested exception is java.lang.ClassCastException: com.ibm.xtq.xslt.jaxp.compiler.Tran
Could not instantiate bean class [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]:
Constructor threw exception; nested exception is java.lang.ClassCastException:
com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl incompatible with
javax.xml.transform.TransformerFactory
Caused by: java.lang.ClassCastException: com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl
incompatible with javax.xml.transform.TransformerFactory
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
at org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.<init>(AbstractXmlHttpMessageConverter.java:47)
at org.springframework.http.converter.xml.SourceHttpMessageConverter.<init>(SourceHttpMessageConverter.java:45)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.<init>(AnnotationMethodHandlerAdapter.java:197)
无法实例化bean类[org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter]:
构造函数抛出异常;嵌套异常为java.lang.ClassCastException:
com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl与不兼容
javax.xml.transform.TransformerFactory
原因:java.lang.ClassCastException:com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl
与javax.xml.transform.TransformerFactory不兼容
位于javax.xml.transform.TransformerFactory.newInstance(未知源)
位于org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter。(AbstractXmlHttpMessageConverter.java:47)
位于org.springframework.http.converter.xml.SourceHttpMessageConverter.(SourceHttpMessageConverter.java:45)
位于org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.(AnnotationMethodHandlerAdapter.java:197)
这似乎对applicationContext.xml中的任何bean都没有任何影响,但仍然很奇怪。对我来说,这看起来好像IBM类正在泄漏到我的应用程序中
我怎样才能解决这个问题?我已经将“访问内部服务器类”选项设置为“限制”。我不能支持限制,因为我个人没有使用限制的经验,但我认为问题更多地与限制有关。您所指的类是TransformerFactory的IBMJava实现的一部分,我认为您可以尝试以下方法之一来解决这个问题
为什么说IBM类正在泄漏到您的应用程序中 要求TransformerFactory创建一个新实例。它遵循一系列步骤来确定要使用哪个TransformerFactory。如果没有指定任何配置,它只选择使用默认工厂 以下是TransformerFactory的javadoc: () 什么是操作系统?那是AIX吗 查看这个AIX文档(上面的链接),它告诉我这是默认的Impl: javax.xml.transform.TransformerFactory 选择XSLT处理器。可能的值为: com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl 使用XL TXE-J编译器。此值是默认值 发回其他信息,以便我们可以尝试并解决此问题 嗯
Manglu这确实是一个类加载问题,但是这不能通过更改类加载程序设置来解决 问题是XMLAPI和javax.xml jar是通过一些maven依赖项导入的 因为我们已经将应用程序的类加载器策略设置为PARENT_LAST,所以javax.xml.transform.TransformerFactory是从我们的jar文件中的WebApp类加载器加载的。 然而,它的实现'com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl'来自服务器类加载器,这个实现链接到JDK/JRE提供的javax.xml.transform.TransformerFactory 因为类是从不同的源加载的,所以抛出了一个ClassCastException 删除对XMLAPI/xerces/javax.xml jars的所有依赖关系解决了这个问题。 由于这些API现在是JDK的一部分,因此不再需要导入它们 。。。如果你想知道为什么我对这个问题了解这么多:我和亚伦一起工作