Саксонский XMLBeans Tomcat - PullRequest
1 голос
/ 13 мая 2009

Мы недавно обновили наш веб-сервис Tomcat. Единственное, что мы действительно обновили, это то, что мы обновили XMLBeans до версии 2.4 и Saxon до версии 9.

Запустив Netbeans и Eclipse, наш проект теперь работает нормально, но при попытке развернуть его в Tomcat мы получаем следующее.

Мы пытались обновить JAXEN до версии 1.1.1, но без радости.

Есть идеи?

Ошибка, которую мы получаем при развертывании:

<code>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)

1 Ответ

2 голосов
/ 13 мая 2009

Проблема вызвана файлом JAR, в файле MANIFEST.MF которого содержится значение атрибута Extension-List, которое Tomcat не нравится. Tomcat ожидает, что значением этого атрибута будет список имен расширений, разделенных пробелами (см. Источник ManifestResource ), но, похоже, один из ваших JAR-файлов имеет список dom4j-core,jdom,xml-apis,xerces,junit, разделенный запятыми. В этом списке нет пробелов, поэтому Tomcat считает, что это одно большое расширение.

Имена расширений также используются для префикса имен других атрибутов в манифесте. Например, вот часть правильного манифеста:

Extension-List: ant qdox commons-attributes-api javadoc
ant-Extension-Name: ant
ant-Implementation-Version: 1.5
ant-Implementation-URL: http://www.ibiblio.org/maven/ant/jars/ant-1.5.
 jar
qdox-Extension-Name: qdox
qdox-Implementation-Version: 1.5

Имена атрибутов могут содержать только буквы, цифры, дефисы и подчеркивания, поэтому имена расширений также должны соответствовать тем же правилам. Имя расширения с запятой в нем явно недопустимо, и именно поэтому вы получаете исключение выше.

Я ознакомился с официальной спецификацией JAR-файла , но, похоже, это не указывает на то, как эти имена расширений следует разделять.

Я не могу сказать, какой JAR имеет этот атрибут Extension-List через запятую в своем манифесте. Однако я бы сначала проверил файлы JAR в последних версиях XMLBeans и Saxon. Если ваш проект работал до обновления, вероятно, проблема была вызвана чем-то, что изменилось недавно.

Исправление, конечно, заключается в том, чтобы отредактировать файл манифеста, использующий ошибки, чтобы использовать пробелы вместо запятых в атрибуте Extension-List.

Удачи!

...