欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JBoss应用遇到问题记录

程序员文章站 2022-07-13 10:57:06
...

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

see: http://cxf.547215.n5.nabble.com/Does-anyone-successfully-deployed-CXF-services-with-WS-Security-Signature-and-Encyrption-in-WebSpher1-td563604.html

 

 

相关标签: jboss