最近研究了一下xfire,当在web project集成xfire servlet时,遇到了两个问题。
问题一:org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [META-INF/xfire/services.xml]; nested exception is java.io.FileNotFoundException: class path resource [META-INF/xfire/services.xml] cannot be opened because it does not exist。
问题二:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.xfire.spring.ServiceBean' defined in class path resource [META-INF/xfire/services.xml]: Initialization of bean failed; nested exception is java.lang.UnsupportedClassVersionError: Bad version number in .class file
解决方法:
对于第一个问题,网上可以找到解决方案。就是将 project/META-INF 文件夹拷到classes目录下。原因是这是xfire默认的加载路径。所以要手工拷一下。
对于第二个问题,主要问题在于‘UnsupportedClassVersionError',可以肯定是某些类的版本在当前的环境下不支持。一般是高版本的class,在低版本的jdk上会出现这个问题。而且我下载xfire的时候,测试过xfire是可以使用的,所以xfire本省的jar应该没有问题。问题只可能出现在web 项目的class上。经查找发现,我用的Lomboz eclipse安装的jdk是1.6的。但是tomcat的jdk为1.5。修改eclipse web项目 jdk为1.5,重新编译。导出war包,再访问http://localhost:8080/mywebservice/services/ 可以访问了。
至此问题成功解决。
大家会想每次这样拷META-INF 文件夹多不方便,有没有一种方式可以在打war包的时候,META-INF目录就已经在classes目录下了呢?
答案:肯定有。具体做法如下:
其实只要将META-INF目录移到src目录下,这个问题就轻松解决了。确实很简单。但是当时就是没想到。
总结一下:xfire集成到项目中,有几个注意点:
第一、在web.xml添加xfire servlet;
第二、将META-INF/xfire/services.xml将项目中要对外发布的web service类配置好;
第三、把META-INF目录移到src下;
第四、打war,发布到应用服务器上;
第五、将META-INF文件夹,移到classes目录下;
第六、使用http://localhost:8080/projectName/services/ 来查看服务是否发布成功。即使有多个项目都用xfire来发布,都不会影响,项目名不可能一样,注意命名空间不能相同。
转自:http://liyege2003.iteye.com/blog/452631
http://blog.csdn.net/zhq426/article/details/7400160