2009-05-26 88 views
0

我有一個使用oracle數據庫的簡單Web服務。但是,當我在內部測試服務時工作正常,但是,通過我的客戶端調用Web服務(在同一臺機器上但在不同的WAR中)會引發invocationtargetexception。我終於發現實例化OracleDriver是個問題。它根本不會拋出任何異常,所以我無法找出錯誤是什麼。實例化Oracle驅動程序導致InvocationTargetException

谷歌搜索只提供了一個使用oracle.jdbc.driver.OracleDriver而不是oracle.jdbc.OracleDriver的解決方案,但似乎沒有解決任何問題。我使用的jar是ojdbc14.jar,據我所知,它正確包含在Web服務的類路徑中,因爲它在我使用簡單的主要方法測試服務時起作用。

編輯: InvocationTargetException由AxisFault從Axis服務器生成。 invocationtargetexception是一個包裝類,我試圖使用.getCause()提取異常的嘗試總是返回null。

我正在部署使用jboss的服務,並且在源庫中包含驅動程序JAR文件,但不包括服務器。在/ jboss/server/default/lib中包含驅動程序解決了它。

+0

您可以發佈完整的例外呢? – 2009-05-26 14:43:47

+0

特別是,導致異常的異常是什麼。 – 2009-05-26 15:04:13

回答

0

沒有更多的信息,很難提供具體的建議;然而,我有一個Oracle驅動程序的使用經驗,它嘗試通過本機OCI庫進行連接,無法找到安裝在系統上的那些庫,並引發一個InvocationTargetException。這一切都來自非常模糊的記憶,所以你的里程將幾乎肯定會有所不同。

這已經有一段時間了,但如果內存服務於我,我有一種情況,連接URL配置不正確,OracleDriver(或其一個包裝器)通過一組可能的連接方法迭代,試圖找到一個工作。在正確配置了URL的情況下,它始終沒有進入OCI嘗試(瘦連接方法嘗試第一次),但是如果連接URL配置錯誤,瘦嘗試將失敗,導致OCI嘗試,然後嘗試(從而導致的InvocationTargetException),因爲OCI客戶端未安裝在主機上

所以,有些事情要檢查:

  1. 是連接的URL是否有效?如果您在兩個地方使用相同的連接URL,您確定兩個進程都綁定到同一個NIC嗎?如果它們綁定到不同的NIC,則可能會導致連接異常,即使在同一臺主機上。
  2. 在這兩種情況下環境是否相同 - 如果OCI客戶端在您的開發環境中得到使用,則可能有幾個環境變量依賴於它。如果這些環境變量在servlet容器運行的環境中沒有相同的設置,我期望不同的行爲。