1

在将 myfaces 1.2 应用程序部署到 websphere 8.0 时出现“java.lang.NoSuchMethodException:没有这样的可访问方法:对象上的 addRenderKitClass():org.apache.myfaces.config.impl.digester.elements.RenderKit”异常。似乎类似于https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014782514

看起来它是由从不同的 jsf 库加载的 RenderKit 和 DigesterFacesConfigUnmarshallerImpl 引起的。运行带有“详细类加载”的服务器证实了这一点:

me@mycomp:/opt/IBM/WebSphere/AppServer/profiles/PROF1/logs/server1# grep org.apache.myfaces.config.impl.digester.elements.RenderKit native_stderr.log 
class load: org.apache.myfaces.config.impl.digester.elements.RenderKit from: file:/opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.jsf.myfaces.jar
class load: org.apache.myfaces.config.impl.digester.elements.RenderKit from: file:/opt/IBM/WebSphere/AppServer/profiles/PROF1/installedApps/myNode03Cell/mnu-ear.ear/myapp.war/WEB-INF/lib/myfaces-impl-1.2.5.jar
class load: org.apache.myfaces.config.impl.digester.elements.RenderKit from: file:/opt/IBM/WebSphere/AppServer/profiles/PROF1/installedApps/myNode03Cell/mnu-ear.ear/myapp.war/WEB-INF/lib/myfaces-impl-1.2.5.jar
class load: org.apache.myfaces.config.impl.digester.elements.RenderKit from: file:/opt/IBM/WebSphere/AppServer/profiles/PROF1/installedApps/myNode03Cell/mnu-ear.ear/myapp.war/WEB-INF/lib/myfaces-impl-1.2.5.jar

接着

my@mycomp:/opt/IBM/WebSphere/AppServer/profiles/PROF1/logs/server1# grep DigesterFacesConfigUnmarshallerImpl native_stderr.log 
class load: org.apache.myfaces.config.impl.digester.DigesterFacesConfigUnmarshallerImpl from: file:/opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.jsf.myfaces.jar

因此 DigesterFacesConfigUnmarshallerImpl 仅从 IBM 的 jsf 加载,而 RendererKit 从所有可能的位置加载。

所以问题是如何从自定义 jsf 库中加载 DigesterFacesConfigUnmarshallerImpl。

4

1 回答 1

-1

我刚刚遇到了同样的问题。这似乎是由于 WAR/EAR 中的某些 faces-config.xml 文件不符合服务器期望的版本(从 WAS 8 开始为 2.0)引起的。

在我们的场景中,这应该不是问题,因为我们将我们自己的 JSF 版本与 WAR 捆绑在一起,并将 EAR 和该 EAR 中包含的 WAR 的类加载器策略首先设置为本地类加载器,并且捆绑的 JSF 版本是 1.2 . 但是,从 faces-config.xml 文件的标题中删除所有版本和 DTD 信息为我们解决了这个问题。

于 2013-06-17T07:08:14.347 回答