【问题标题】:How to make a Spring Boot WAR work on JBoss AS 7如何使 Spring Boot WAR 在 JBoss AS 7 上运行
【发布时间】:2014-07-11 20:09:47
【问题描述】:

我尝试在 JBoss AS 7.1.1(Windows 7 企业版)上部署打包为 WAR 的 Spring Boot 应用程序,但失败并出现错误。为了消除我自己的应用程序的问题,我决定按照 Spring 指南 Converting a Spring Boot JAR Application to a WAR 使用更简单的应用程序再次尝试。

我下载了source for the guide 并按照创建WAR 的说明编译了“完成”版本,但是包失败并在部署时出现同样的错误。

11:59:37,490 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/gs-convert-jar-to-war-0.1.0]] (MSC service thread 1-2) Exception starting filter errorPageFilter: java.lang.IllegalAccessException: Class org.jboss.as.web.deployment.WebInjectionContainer can not access a member of class org.springframework.boot.context.web.ErrorPageFilter with modifiers ""
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65) [rt.jar:1.6.0_20]
    at java.lang.Class.newInstance0(Class.java:349) [rt.jar:1.6.0_20]
    at java.lang.Class.newInstance(Class.java:308) [rt.jar:1.6.0_20]
    at org.jboss.as.web.deployment.WebInjectionContainer.newInstance(WebInjectionContainer.java:80) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.web.deployment.WebInjectionContainer.newInstance(WebInjectionContainer.java:72) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:441) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.13.Final.jar:]
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.13.Final.jar:]
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_20]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_20]
    at java.lang.Thread.run(Thread.java:619) [rt.jar:1.6.0_20]

我查看了ErrorPageFilter 的源代码,发现该类是包私有的,这可能是IllegalAccessException 的原因。

所以我的问题……

  • 包私有的类实际上是原因吗?
  • 如果是这样,有什么方法可以在不放弃ErrorPageFilter 的情况下解决这个问题(例如 Java 魔法)?

【问题讨论】:

    标签: java spring jboss7.x war spring-boot


    【解决方案1】:

    正如in github 所讨论的那样,我相信这是您看到的错误的原因(我们同意这是 JBoss 中的一个错误)。

    如果您想要解决方法,只需复制 SpringBootServletInitializer 代码,让您自己的类具有相同的内容,但去掉那些有影响的部分。

    不幸的是,我不认为仅仅让ErrorPageFilter 可以公开访问会在 JBoss 中修复您的应用程序,而且您确实已经表明是这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-11
      • 2012-03-23
      • 2012-04-26
      • 2023-03-13
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多