【问题标题】:Tomcat: failed to parse runtime descriptorTomcat:无法解析运行时描述符
【发布时间】:2012-11-14 08:17:06
【问题描述】:

我尝试在 CentOS 6.3 -> Apache -> Tomcat 5.5 下部署 JAX-WS webservice

我用谷歌搜索了几个小时,问了我所有的朋友,还试图在 stackoverflow 上找到解决方案,但无济于事。有人可以帮助我吗?提前谢谢你。

我收到以下错误消息:

2012 年 11 月 26 日 12:36:52 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener parseAdaptersAndCreateDelegate
严重:WSSERVLET11:无法解析运行时描述符:java.lang.IllegalAccessError:com.sun.xml.ws.assembler.MetroClientTubelineAssemblyContextImpl 类无法访问其超类 com.sun.xml.ws.assembler.DefaultClientTubelineAssemblyContext
java.lang.IllegalAccessError:com.sun.xml.ws.assembler.MetroClientTubelineAssemblyContextImpl 类无法访问其超类 com.sun.xml.ws.assembler.DefaultClientTubelineAssemblyContext
    在 java.lang.ClassLoader.defineClass1(本机方法)
    在 java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    在 java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    在 java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    在 java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    在 java.security.AccessController.doPrivileged(本机方法)
    在 java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    在 com.sun.xml.ws.assembler.MetroTubelineAssemblerFactoryImpl.doCreate(MetroTubelineAssemblerFactoryImpl.java:63)
    在 com.sun.xml.ws.api.pipe.TubelineAssemblerFactory.create(TubelineAssemblerFactory.java:109)
    在 com.sun.xml.ws.server.WSEndpointImpl.(WSEndpointImpl.java:170)
    在 com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:306)
    在 com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:301)
    在 com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:147)
    在 com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:574)
    在 com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:557)
    在 com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:260)
    在 com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:152)
    在 com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:131)
    在 com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:152)
    在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
    在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
    在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:884)
    在 org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:737)
    在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
    在 org.apache.catalina.startup.HostConfig.check(HostConfig.java:1271)
    在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:301)
    在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    在 org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1306)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
    在 java.lang.Thread.run(Thread.java:662)
2012 年 11 月 26 日 12:36:52 PM org.apache.catalina.core.StandardContext listenerStart
严重:向 com.sun.xml.ws.transport.http.servlet.WSServletContextListener 类的侦听器实例发送上下文初始化事件的异常
com.sun.xml.ws.transport.http.servlet.WSServletException:WSSERVLET11:无法解析运行时描述符:java.lang.IllegalAccessError:com.sun.xml.ws.assembler.MetroClientTubelineAssemblyContextImpl 类无法访问其超类 com.sun。 xml.ws.assembler.DefaultClientTubelineAssemblyContext
    在 com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:141)
    在 com.sun.xml.ws.transport.http.servlet.WSServletContextListener.contextInitialized(WSServletContextListener.java:152)
    在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795)
    在 org.apache.catalina.core.StandardContext.start(StandardContext.java:4252)
    在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
    在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
    在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
    在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:884)
    在 org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:737)
    在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
    在 org.apache.catalina.startup.HostConfig.check(HostConfig.java:1271)
    在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:301)
    在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
    在 org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1306)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1570)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1579)
    在 org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1559)
    在 java.lang.Thread.run(Thread.java:662)
原因:java.lang.IllegalAccessError:com.sun.xml.ws.assembler.MetroClientTubelineAssemblyContextImpl 类无法访问其超类 com.sun.xml.ws.assembler.DefaultClientTubelineAssemblyContext
    在 java.lang.ClassLoader.defineClass1(本机方法)
    在 java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
    在 java.lang.ClassLoader.defineClass(ClassLoader.java:615)
    在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    在 java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    在 java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    在 java.security.AccessController.doPrivileged(本机方法)
    在 java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    在 java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    在 com.sun.xml.ws.assembler.MetroTubelineAssemblerFactoryImpl.doCreate(MetroTubelineAssemblerFactoryImpl.java:63)
    在 com.sun.xml.ws.api.pipe.TubelineAssemblerFactory.create(TubelineAssemblerFactory.java:109)
    在 com.sun.xml.ws.server.WSEndpointImpl.(WSEndpointImpl.java:170)
    在 com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:306)
    在 com.sun.xml.ws.server.EndpointFactory.create(EndpointFactory.java:301)
    在 com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:147)
    在 com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:574)
    在 com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:557)
    在 com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parseAdapters(DeploymentDescriptorParser.java:260)
    在 com.sun.xml.ws.transport.http.DeploymentDescriptorParser.parse(DeploymentDescriptorParser.java:152)
    在 com.sun.xml.ws.transport.http.servlet.WSServletContextListener.parseAdaptersAndCreateDelegate(WSServletContextListener.java:131)
    ... 17 更多
2012 年 11 月 26 日 12:36:52 PM org.apache.catalina.core.StandardContext 开始
严重:错误 listenerStart
2012 年 11 月 26 日 12:36:52 PM org.apache.catalina.core.StandardContext 开始
严重:上下文 [/lws] 启动因先前的错误而失败
2012 年 11 月 26 日 12:36:52 PM com.sun.xml.ws.transport.http.servlet.WSServletContextListener contextDestroyed
信息:WSSERVLET13:JAX-WS 上下文侦听器已损坏

【问题讨论】:

    标签: java apache tomcat jax-ws


    【解决方案1】:

    查看文档:

    http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/IllegalAccessError.html 如果应用程序尝试访问或修改字段,或者调用它无权访问的方法,则抛出此异常。 通常,这个错误会被编译器捕获;如果类的定义发生了不兼容的更改,则该错误只会在运行时发生。

    换句话说,MetroClientTubelineAssemblyContextImpl 被编译为超类 DefaultClientTubelineAssemblyContext 的一个版本的子类,但它似乎在运行时发生了变化。

    您可能遇到的情况是类路径中有两个 jar,其中一个是 DefaultClientTubelineAssemblyContext 或 MetroClientTubelineAssemblyContextImpl 这两个类。您应该查找哪些 jar 具有这些类并尝试只加载一个。

    查找应用程序 Web 存档的 WEB-INF/lib 中的 jar 以及 $TOMCAT_HOME/lib 文件夹中的 jar,以检查是否找到任何重复项。

    【讨论】:

    • 谢谢!它有助于解决我的问题。就我而言,该问题的原因是我在文件夹中手动设置了 jars,并且在 POM 文件中也设置了依赖项。如果您手动提供了一些 jar,这些 jar 应在 POM 文件中注明为“已提供”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多