我们最近更新了Tomcat Web服务。我们真正更新的唯一一件事就是将XMLBeans更新为版本2.4,将Saxon更新为版本9。
运行Netbeans和eclipse,我们的项目现在可以正常工作,但是当尝试部署到tomcat时,我们得到了以下内容。
我们尝试将JAXEN更新到1.1.1版,但没有任何乐趣。
有任何想法吗?
我们在部署中遇到的错误是:
java.lang.IllegalArgumentException: dom4j-core,jdom,xml-apis,xerces,junit-Extension-Name at java.util.jar.Attributes$Name.(Attributes.java:440) at java.util.jar.Attributes.getValue(Attributes.java:99) at org.apache.catalina.util.ManifestResource.getRequiredExtensions(ManifestResource.java:186) at org.apache.catalina.util.ManifestResource.processManifest(ManifestResource.java:155) at org.apache.catalina.util.ManifestResource.(ManifestResource.java:52) at org.apache.catalina.util.ExtensionValidator.validateApplication(ExtensionValidator.java:186) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4154) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:511) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1220) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297) at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImpl.java:213) at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:815) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784) at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1458) at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:820) at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:348) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595)
该问题是由JAR文件引起的,该文件的MANIFEST.MF文件包含Extension- ListTomcat不喜欢的属性的值。Tomcat希望此属性的值是扩展名的用空格分隔的列表(请参阅ManifestResource源),但是您的其中一个JAR似乎使用逗号分隔的列表dom4j-core,jdom,xml- apis,xerces,junit。此列表中没有空格,因此Tomcat认为这是一个很大的扩展名。
Extension- List
dom4j-core,jdom,xml- apis,xerces,junit
扩展名还用于为清单中其他属性的名称添加前缀。例如,这是有效清单的一部分:
扩展列表:ant qdox commons-attributes-api javadoc ant-扩展名:ant ant实施版本:1.5 ant-Implementation-URL:http://www.ibiblio.org/maven/ant/jars/ant-1.5。 罐 qdox-Extension-Name:qdox qdox-Implementation-Version:1.5
属性名称只能包含字母,数字,连字符和下划线,因此扩展名也必须遵循相同的规则。带有逗号的扩展名显然是无效的,这就是为什么您遇到上述异常的原因。
我看过官方的JAR文件规范,但似乎没有说明应如何分隔这些扩展名。
我不能说哪个JAR Extension- List在清单中具有此逗号分隔的属性。但是,我将首先检查XMLBeans和Saxon的最新版本中的JAR文件。如果您的项目在升级之前可以正常工作,则可能是问题是由最近发生的更改引起的。
解决方法当然是编辑有问题的清单文件,以便在其Extension-List属性中使用空格而不是逗号。
Extension-List
祝好运!