JBoss应用遇到问题记录
Q: 无法读取classpath下以及jar包中的资源文件
A: 由JBoss特殊的vfs协议导致。
JBoss部署war包时,会将lib下的jar包都分别生成1个以该jar包名为目录名的临时目录,该目录及其结构举例如下:
\jboss-as-7.1.1.Final\standalone\tmp\vfs\deployment4d324381d816bd6d\xxx.jar-f6e3c6735c9f83f9\contents
\jboss-as-7.1.1.Final\standalone\tmp\vfs\deployment4d324381d816bd6d\xxx.jar-f6e3c6735c9f83f9\contents\xxx.jar
以xxx.properties为例,通过classloader.getResource得到的文件url为
/jboss-as-7.1.1.Final/bin/content/xxx.war/WEB-INF/lib/xxx.jar/xxx.properties
而/bin/content 这个目录实际上是不存在的,通过以下代码可以得到该资源文件的path为:
\jboss-as-7.1.1.Final\standalone\tmp\vfs\deployment99c58cfccb17ed42\xxx.jar-f6e3c6735c9f83f9\contents\xxx.properties
而实际上contents目录又是空的,因此处理时需要解析得到xxx.jar包的物理路径,然后再从该jar包中取得资源文件。
Object content = url.openConnection().getContent(); Class<?> czz = Class.forName("org.jboss.vfs.VirtualFile"); Method m = czz.getMethod("getPhysicalFile"); File physicalFile = (File) m.invoke(content);
注:需要引入JBoss jar包,maven依赖如下:
<dependency> <groupId>org.jboss</groupId> <artifactId>jboss-vfs</artifactId> <version>3.0.1.GA</version> <!-- jdk1.6+ --> </dependency>
Q: 调用WebService接口时出现以下异常:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/xxx].[WebServiceServlet]] (http--0.0.0.0-8380-2)
Servlet.service() for servlet WebServiceServlet threw exception:
java.lang.NoClassDefFoundError: com/sun/xml/messaging/saaj/soap/SOAPDocumentImpl
A: 删掉部署包中的以下2个jar包:saaj-impl-1.3.9.jar, saaj-api-1.3.3.jar
上一篇: VS2012使用XListCtrl
下一篇: 关于selenium的等待时间的问题