日期:2014-05-20  浏览次数:20881 次

web service访问的问题
webservice发布成功后能访问到服务的WSDL文件,但是用客户端访问的时候出现以下错误
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Unexpected Error
at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:188)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:108)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
at $Proxy34.getDisplayLiveChannel(Unknown Source)
at test.Test.main(Test.java:22)
这个是怎么回事啊?

------解决方案--------------------
Jboss的soap实现的是JDK1.5的javax.xml.soap.SoapMessage接口,
这个接口的setProperty方法在老版本是不需要override的,
但是到了Java1.6,由于Java1.6的jdk本身自带soap包,
而自带的这个包的SoapMessage接口对setProperty方法又强制其实现类要override自身,
否则抛出上述异常。
解决办法:
A方案
1.把${JBOSS_HOME}/lib/中除了getopt.jar, jboss-system.jar, jboss-jmx.jar其他所有的jar拷贝进${JBOSS_HOME}/lib/endorsed
2.同时拷贝${JBOSS_HOME}/client/目录中的jboss-saaj.jar ,jboss-jaxrpc.jar到${JBOSS_HOME}/lib/endorsed目录下
这样服务器将使用jboss自带的老版本

B方案
JBoss使用JDK1.5,而客户端则JDK1.5,JDK1.6均可.