WebService報錯javax.xml.ws.soap.SOAPFaultException: javax.xml.ws.WebFault.messageName()
一、發現問題
JAX-WS規範是一組XML web services的JAVA API。JAXWS-RI是其的一個包。
用jaxws-ri-2.2.5.zip做webservice,將jaxws-ri-2.2.5.zip中lib內容拷貝到web project的lib中,運行時使用該包時拋出異常:javax.xml.ws.soap.SOAPFaultException: javax.xml.ws.WebFault.messageName() Ljava/lang/String。
二、原因分析
JAXWS-RI包中使用了WebFault對象,JDK也提供該對象,但JDK的WebFault對象沒有messageName這個方法,Tomcat會優先加載JDK裏的對象,這就是包衝突問題。
這就需要建立endorsed文件夾。可理解為將endorsed文件夾裏的包修打入到虛擬機指定的啟動API中取而代之。但能夠覆蓋的類是有限的,如不包括java.lang包中的類。例如在jdk\jre\lib建立的endorsed文件夾裏的包會覆蓋該JDK的lib中原有的包。Tomcat裏的Webfault對象也和JAXWS-RI衝突。故需要在JDK和Tomcat裏麵都要新建endorsed文件夾,放入JAXWS-RI裏的相關包。
三、解決方案
步驟一:將jaxws-api.jar包copy到jdk的jre\lib\endorsed
步驟二:將jaxws-api.jar和jsr181-api.jar包copy到tomcat\endorsed中
若沒有endorsed文件夾,新建即可。jaxws-ri.2.5.5下載地址:https://download.csdn.net/download/woshixuye/6513149
最後更新:2017-04-03 16:49:07