我正在使用以下方法从 WildFly 中的 WAR 文件中获取资源:
this.getClass().getResource(relativePath)
当应用程序部署为分解的 WAR 时,它可以工作。它也曾用于压缩 WAR。昨天,我在 Eclipse 中对项目进行了清理和重建,但它刚刚停止工作。
当我检查资源根目录时:
logger.info(this.getClass().getResource("/").toExternalForm());
我明白了:
file:/C:/JBoss/wildfly8.1.0.CR1/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
所以,难怪它不起作用。它可能与 JBoss 模块加载有关,但我不知道这是错误还是正常行为。
我在 StackOverflow 上发现了各种类似的问题,但没有适用的解决方案。建议之一是像这样使用 ServletContext:
@Resource
private WebServiceContext wsContext;
...
ServletContext servletContext = (ServletContext)this.wsContext.getMessageContext()
.get(MessageContext.SERVLET_CONTEXT);
servletContext.getResource(resourcePath);
但是,当我尝试以这种方式获取 MessageContext 时,我得到了 IllegalStateException。所以我基本上被卡住了。有任何想法吗?