当前位置: 代码迷 >> Web前端 >> weblogic9.x与xfire1.2.6矛盾解决心得
  详细解决方案

weblogic9.x与xfire1.2.6矛盾解决心得

热度:801   发布时间:2012-10-29 10:03:53.0
weblogic9.x与xfire1.2.6冲突解决心得
前些日子用xfire1.2.6开发了一个webservice接口,主要功能是用来传输文件,接口定义如下:
public interface WSExport {
public byte[] export(String docPath,String xmlPath) throws Exception;
}

开发好服务端和客户端后,在tomcat6下面测试通过,以为一切ok了。但昨天做集成测试时,把客户端发布到weblogic9.1问题就来了。

问题一:

调用接口,报java.lang.NoSuchMethodError: javax.jws.WebService.portName()Ljava/lang/String 异常。

问题一原因:
经过在网上google+baidu,找到了问题所在,原因是weblogic里面用到包%WL_HOME%\server\lib\weblogic.jar里面有javax.jws.WebService这个类,版本跟xfire里面用到的包xfire-jsr181-api-1.0-M1.jar里面的类javax.jws.WebService版本不一致,而运行时默认优先加载的是weblogic.jar里面的类,所以引起冲突。

问题一解决方法:
把xfire的包xfire-jsr181-api-1.0-M1.jar复制到%WL_HOME%\server\lib\目录下,并且修改配置文件%WL_HOME%\common\bin\commEnv.cmd(linux下修改commEnv.sh)。
找到SET WEBLOGIC_CLASSPATH= 这行,把%WL_HOME%\server\lib\xfire-jsr181-api-1.0-M1.jar加在%WL_HOME%\server\lib\weblogic.jar前面,然后保存。重启weblogic问题一解决。


问题二:
问题一解决后以为万事大吉了,谁知调用接口时,新的问题来了。报:
java.lang.UnsupportedOperationException
        at weblogic.xml.stax.XMLStreamReaderBase.getTextCharacters(XMLStreamRead
erBase.java:487)

问题二原因:
找了半天没找到真正原因,只知道大家都说接口返回是byte[]就会出现以上异常。

问题二解决方法:
这是个不完美的解决方法,需要更改接口,把byte[]用base64进行编码,编码后byte[]变成了String,然后客户端收到String后用base64解码成byte[]。异常不再出现,成功将文件通过webservice传输到客户端。希望有高人提出更好的解决方法供大家讨论。

1 楼 大猫阿Ken 2009-08-31  
2 楼 大猫阿Ken 2009-10-29  
最近实验了一下新的解决方法,如下:
上面遇到的两个问题其实都是包加载顺序问题,解决方法不需要上面这么复杂。只需要在工程的/WEB-INF/weblogic.xml文件中作修改,让运行时先加载工程目录下的包就可以了,weblogic.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:wls="http://www.bea.com/ns/weblogic/90"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
	<wls:context-root>/</wls:context-root>
	<wls:container-descriptor>
		<wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
	</wls:container-descriptor>
</wls:weblogic-web-app>
3 楼 zzl99mail 2009-11-25  
跟楼主同样的问题,按照该方法作了,还是不行??????????????、、
Error creating bean with name 'jsr181HandlerMapping' defined in ServletContext resource [/WEB-INF/cfg/cfg_spring/jfWebServiceXfire.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: javax.jws.WebService.portName()Ljava/lang/String;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
Truncated. see log file for complete stacktrace
java.lang.NoSuchMethodError: javax.jws.WebService.portName()Ljava/lang/String;
at org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations.getWebServiceAnnotation(Jsr181WebAnnotations.java:55)
at org.codehaus.xfire.annotations.AnnotationServiceFactory.create(AnnotationServiceFactory.java:173)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:356)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:337)
at org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping.processBeans(Jsr181HandlerMapping.java:108)
Truncated. see log file for complete stacktrace
>
<2009-11-25 上午11时14分49秒 CST> <Error> <Deployer> <BEA-149231> <Unable to set the activation state to true for the application '_appsdir_omds_dir'.
weblogic.application.ModuleException:
at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:894)
at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:336)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:204)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)
at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:60)
Truncated. see log file for complete stacktrace
java.lang.NoSuchMethodError: javax.jws.WebService.portName()Ljava/lang/String;
at org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations.getWebServiceAnnotation(Jsr181WebAnnotations.java:55)
at org.codehaus.xfire.annotations.AnnotationServiceFactory.create(AnnotationServiceFactory.java:173)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:356)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:337)
at org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping.processBeans(Jsr181HandlerMapping.java:108)
Truncated. see log file for complete stacktrace
>
<2009-11-25 上午11时14分49秒 CST> <Notice> <Log Management> <BEA-170027> <The server initialized the domain log broadcaster successfully. Log messages will now be broadcasted to the domain log.>
<2009-11-25 上午11时14分49秒 CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN>
<2009-11-25 上午11时14分49秒 CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING>
<2009-11-25 上午11时14分50秒 CST> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, http.>
<2009-11-25 上午11时14分50秒 CST> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 10.142.50.102:7001 for protocols iiop, t3, ldap, http.>
<2009-11-25 上午11时14分50秒 CST> <Notice> <WebLogicServer> <BEA-000331> <Started WebLogic Admin Server "AdminServer" for domain "omds_domain" running in Development Mode>
<2009-11-25 上午11时14分50秒 CST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING>
<2009-11-25 上午11时14分50秒 CST> <Notice> <WebLogicServer> <BEA-000360> <Server started in RUNNING mode>
  相关解决方案