2014-05-06 41 views
1

我們的Web服務客戶端有一些問題。我們使用的軸實現從版本1.3升級到1.4,同時axis2模塊被引入到類路徑中。如果您嘗試使用客戶端現在發送一個請求,會出現以下錯誤:引入axis2後的webservice客戶端中的NullPointerException

Caused by: javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException 
at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1326) 
at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1052) 
at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalFaultResponse(DocLitBareMethodMarshaller.java:415) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:577) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:520) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:386) 
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:171) 
at com.sun.proxy.$Proxy19.documentRepositoryProvideAndRegisterDocumentSetB(Unknown Source) 

同樣的情況,如果我們完全軸1.4從他的classpath中刪除(在發佈版本中,我們將可能是不可能的根據它有太多的瓶子),只能使用axis2。所以這似乎是axis2的問題。我試圖谷歌任何東西,但無法找到一個解決方案,匹配我們的問題。關於這裏出了什麼問題的任何想法?

+0

您是否更改客戶端,服務器或兩者上的軸的版本?你看過服務器的日誌嗎?如果我正確地讀取了堆棧跟蹤,看起來該消息已發送,並且響應返回了一個帶有消息NullPointerException的簡單SOAP故障。出於好奇,axis2目前在版本1.6.2,爲什麼要「升級」到1.4? –

+0

我們只提供一個客戶端實現。我在第一篇文章中添加了一些關於當前狀態的信息。爲了升級,我們在我們的類路徑中有axis1和axis2。總共有近900個jar文件和我們代碼中各種令人討厭的依賴關係,從舊代碼更新到舊代碼並不總是那麼容易。我們必須一步一步地做到最小的影響,所以我們可以在下一步之前真正解決什麼問題。這必須在軟件在需要法律更新的客戶上運行時完成。你大概可以想像這將如何結束。 – Viciouss

+0

您是否能夠從您所撥打的服務(即日誌消息)中獲得任何其他信息?你是否能夠使用諸如wireshark之​​類的東西來確定電報上的消息到底是什麼? –

回答

0

由於我很新的Web服務,有幾個學到的知識:

  1. 雖然軸1.4在我們的類路徑,它不會自動爲沒有Provider實現使用。我們一直使用JAX-WS RI,甚至沒有注意到。我剛剛通過用wireshark檢查請求發現了這一點。

  2. 我們爲初始解決方案創建的SOAPHandlers負責NPE。我開始調試整個過程,並注意到我們的一個處理程序使用context.getMessage()。getSOAPHeader(),它使用axis2返回null,儘管它在使用默認實現時返回了SOAPHeader。另一個是我們爲多個附件添加的解決方法(請參見https://java.net/jira/browse/WSIT-1320),這也失敗了,因爲MTOM現在正在按照它的工作方式工作。我想知道的是,如果處理程序中有錯誤,框架會生成一個SOAP錯誤消息,其中包含剛發生的異常類型(但不是實際的堆棧跟蹤),然後照常進行。它返回此消息並繼續解析消息,就好像消息是作爲請求的答案一樣。從開發人員的角度來看,stacktrace看起來像是在服務器端拋出錯誤,或者由於某些框架的濫用,但事實是處理器中出現了問題,並且拋出了異常。這花了很長時間才發現,並不是我所期望的。

  3. 永遠不要混淆不同的Web服務提供商,因爲它總是會以令人頭疼的方式結束。與你公司的所有其他部門溝通,儘快做到這一點,然後再把所有事情都拿出來。

我們現在面臨的大問題是,我們有一個開源項目,它提供了由我們維護的Web服務客戶端。該項目對任何WS實現都沒有依賴性,因爲它使用Java的jax-ws ri實現。它現在在不同的環境中使用,例如JBoss和內部專有的服務器環境。到目前爲止,沒有問題,儘管JBoss使用CXF並且我們提到了默認實現,所以它們看起來是兼容的。隨着axis2的引入,一切都出錯了,因爲axis2-jaxws.jar有一個服務加載器條目,它首先被評估,並且可能不會被系統屬性javax.xml.ws.spi.Provider覆蓋。我嘗試刪除這個jar,但是它導致了其他錯誤,我現在無法解決這個問題。

我會離開這個線程,但現在我幾乎沒有希望得到這個固定的當前設置。

相關問題