Nik*_*dun 5 java jboss getresource wildfly-8
我使用以下方法从 WildFly 的 WAR 文件中获取资源:
this.getClass().getResource(relativePath)
Run Code Online (Sandbox Code Playgroud)
当应用程序部署为爆炸式 WAR 时,它会起作用。它曾经也适用于压缩的 WAR。昨天,我在 Eclipse 中对项目进行了清理和重建,但它刚刚停止工作。
当我检查资源根目录时:
logger.info(this.getClass().getResource("/").toExternalForm());
Run Code Online (Sandbox Code Playgroud)
我明白了:
file:/C:/JBoss/wildfly8.1.0.CR1/modules/system/layers/base/org/jboss/as/ejb3/main/timers/
Run Code Online (Sandbox Code Playgroud)
所以,难怪它不起作用。它可能与 JBoss 模块加载有关,但我不知道这是错误还是正常行为。
我在 StackOverflow 上发现了各种类似的问题,但没有适用的解决方案。建议之一是像这样使用 ServletContext:
@Resource
private WebServiceContext wsContext;
...
ServletContext servletContext = (ServletContext)this.wsContext.getMessageContext()
.get(MessageContext.SERVLET_CONTEXT);
servletContext.getResource(resourcePath);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试以这种方式获取 MessageContext 时,我得到了一个 IllegalStateException。所以我基本上被卡住了。有任何想法吗?
我最终放弃了,并将我的资源文件放入新的 JBoss 模块中,如此链接中所述。
https://community.jboss.org/wiki/HowToPutAnExternalFileInTheClasspath
它可以工作,但缺点是有两个部署目标,因此事情更加复杂。从好的方面来说,WAR 文件的大小减小了,并且如果只有部分资源发生了更改,我不必重新部署应用程序。
归档时间: |
|
查看次数: |
12042 次 |
最近记录: |