java - 从 war 文件中读取 list 文件会在 tomcat 7 中产生错误

标签 java intellij-idea tomcat7 war tomcat8

我使用 IntelliJ Idea 在我的 Windows 7 系统上构建了一个 Web 应用程序,并在 Tomcat 8.0 中运行它。 Web 应用程序正确读取 list 文件并显示正确的属性。在我运行于 Ubuntu 14 和 Tomcat 7 的网络服务器上,有一个奇怪的异常:

javax.el.ELException: Cannot convert Build-Name of type class java.lang.String to class java.util.jar.Attributes$Name
at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:419)
at org.apache.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:46)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:469)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:161)
at org.apache.el.parser.AstValue.getValue(AstValue.java:172)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
at javax.faces.component.UIComponentBase$AttributesMap.get(UIComponentBase.java:2414)
at net.bootsfaces.render.RBadge.encBegin(RBadge.java:46)
at net.bootsfaces.component.Badge.encodeBegin(Badge.java:63)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:302)
at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
at org.ocpsoft.rewrite.faces.RewriteViewHandler.renderView(RewriteViewHandler.java:186)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:748)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:486)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:411)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:338)
at org.ocpsoft.rewrite.servlet.impl.HttpRewriteResultHandler.handleResult(HttpRewriteResultHandler.java:41)
at org.ocpsoft.rewrite.servlet.RewriteFilter.rewrite(RewriteFilter.java:268)
at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:188)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:193)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

我在 *.xhtml 文件中的 el 代码:

#{cic.manifest.mainAttributes.getValue('Build-Name')}

我的java-bean-code(我想,我是从stackoverflow上用的,但是再找了下也没找到源码):

@ManagedBean(name = "cic")
@ApplicationScoped
public class ConfigurationInformationController {
private static final Logger LOGGER = LogManager.getLogger(ConfigurationInformationController.class.getName());
    private Manifest manifest = null;
    public Manifest getManifest() {
        return manifest;
    }

    @PostConstruct
    public void init() {
        File manifestFile = null;
        try {
            String home = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/");
            manifestFile = new File(home, "META-INF/MANIFEST.MF");
            manifest = new Manifest();
            manifest.read(new FileInputStream(manifestFile));
        } catch (IOException ioe) {
            LOGGER.error("Unable to read the Manifest file from '"+manifestFile.getAbsolutePath()+"'",ioe);
        }
    }
}

我首先认为这是 servlet 3.0 和 3.1 规范的差异,但我没有发现任何关于规范和我的问题。我希望你能帮上忙。

提前致谢!

最佳答案

试一试:

#{cic.manifest.mainAttributes.get('Build-Name')}

Attributes 上定义了两个 getValue() 方法对象,一个接受 String 参数,一个接受 Attributes.Name 参数。看起来 EL 实现对此感到困惑,因为它试图将您的字符串转换为 Attributes.Name 对象。

关于java - 从 war 文件中读取 list 文件会在 tomcat 7 中产生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091348/

相关文章:

html - intellij通过选择器跳转到html元素

java - "unable to find valid certification path to requested target",但是浏览器说没问题

tomcat7 - Tomcat 未在 docker 镜像上运行

java - 当从java创建excel文件时,我的系统上是否需要安装office

java : Why the thread priority is not followed when there are more than one print statements in run method?

java - OpenSuse Linux 上的 Intellij Idea

intellij-idea - PhpStorm中的行距

tomcat7 主机管理器未将新域添加为主机 - "Failed to create AppBase"

java - 内蒂。 bootstrap.connect 成功后的 channel 是否为 Activity channel ?

java - 创建通用方法以将特定方法作为参数运行