2012-11-15 25 views
0

我需要更改以JAVA編寫的現有Web服務。 Web服務執行一些輸入驗證,例如,當某個數字的輸入無效時,會引發NumberFormatException。帶有錯誤但不拋出異常的SOAP響應

這會導致用戶出現錯誤消息,這是正確的。 但是因爲我們使用log4j,異常在日誌文件中被記錄爲錯誤,所以這是不需要的。

我的問題是: 如何返回SoapFault而不拋出異常? 我認爲這會向用戶返回一個錯誤,但不會將錯誤記錄爲日誌文件中的錯誤。 如果這是不可能的。我怎樣才能配置log4j不記錄某些異常?

+1

您正在使用哪個Web服務框架?你能分享一些代碼嗎? –

+0

嘗試捕獲NumberFormatException並重新拋出SOAPFault。但是我們需要知道你在使用什麼(AXIS2?) – BigMike

回答

0

您可以將數字解析包裝在try \ catch塊中,以捕獲NumberFormatException。它不會在其他地方傳播,並且在catch塊中,您可以返回SoapFault。

int value; 
try{ 
    value = Integer.parseInt(valueString); 
} 
catch(NumberFormatException e){ 
    value = 0; 
    return SoapFault; 
} 
+0

我們沒有使用AXIS2。我認爲這是JWS。我看到導入javax.jws.WebService;我試着返回SOAPFault,但這不起作用,因爲我的方法期望返回一個字符串。 –

+0

@PaulMeems我不是J2EE專家,但也許沒有別的辦法 - 爲了獲得一個SoapFault,你需要拋出一些異常? –

+0

@PaulMeems如果你需要返回一個字符串,那麼什麼樣的字符串對應一個無符號值呢?你可以只返回null嗎? –

0

返回所以我創建了一個自定義異常,在我的log4j.xml排除的類空並沒有解決我的問題:

<category name="My.Company.DoNotLogException"> 
    <priority value="off" /> 
</category>   

現在用戶仍然會得到一個錯誤,但錯誤沒有按再也不會出現在我的日誌裏了。

謝謝大家的幫助。