Java 实例化Oracle驱动程序会导致InvocationTargetException

Java 实例化Oracle驱动程序会导致InvocationTargetException,java,oracle,jdbc,instantiation,Java,Oracle,Jdbc,Instantiation,我有一个使用oracle数据库的简单web服务。当我在内部测试服务时,它工作正常,但是,通过我的客户机调用web服务(在同一台机器上,但在不同的战争中)会抛出invocationtargetexception。我终于发现了实例化OracleDriver的问题。它根本不会抛出任何异常,因此我无法找出错误是什么 谷歌只提供了一个使用oracle.jdbc.driver.OracleDriver而不是oracle.jdbc.OracleDriver的解决方案,但这似乎并没有解决任何问题。我使用的jar

我有一个使用oracle数据库的简单web服务。当我在内部测试服务时,它工作正常,但是,通过我的客户机调用web服务(在同一台机器上,但在不同的战争中)会抛出invocationtargetexception。我终于发现了实例化OracleDriver的问题。它根本不会抛出任何异常,因此我无法找出错误是什么

谷歌只提供了一个使用oracle.jdbc.driver.OracleDriver而不是oracle.jdbc.OracleDriver的解决方案,但这似乎并没有解决任何问题。我使用的jar是ojdbc14.jar,据我所知,它包含在web服务的类路径中。。。因为当我用一个简单的main方法测试服务时,它就工作了

编辑: InvocationTargetException由Axis服务器的AxisFault生成。invocationtargetexception是一个包装类,我尝试使用.getCause()提取异常时总是返回null


我使用jboss部署该服务,并在库中包含源代码的驱动程序JAR文件,但不包括服务器的驱动程序JAR文件。将驱动程序包含在/jboss/server/default/lib中解决了这个问题。

没有更多信息,很难提供具体的建议;但是,我有过Oracle驱动程序的经验,该驱动程序试图通过本机OCI库进行连接,但找不到系统上安装的库,并抛出InvocationTargetException。这一切都来自于非常模糊的记忆,因此您的里程数几乎肯定会有所不同

已经有一段时间了,但是如果内存对我有用的话,我遇到了一个连接URL配置不正确的情况,OracleDriver(或它的一个包装器)迭代了一组可能的连接方法,试图找到一个有效的方法。在URL配置正确的情况下,它从未进行过OCI尝试(精简连接方法尝试排在第一位),但如果连接URL配置错误,精简尝试将失败,从而导致OCI尝试,而OCI尝试也将失败,因为主机上未安装OCI客户机(导致调用TargetException。)

因此,有些事情需要检查:

  • 连接URL有效吗?如果在两个位置使用相同的连接URL,是否确定两个进程都绑定到同一NIC?如果它们绑定到不同NIC,则可能会导致连接异常,即使在同一主机上也是如此
  • 这两种情况下的环境是否相同?如果OCI客户端正在您的开发环境中使用,那么它可能依赖于多个环境变量。如果这些环境变量在servlet容器运行的环境中设置不一致,那么我会期望不同的行为

  • 2个WAR?我想您的ojdbc.jar位于WEB服务WAR的WEB-INF/lib中

    也许你的战争就在耳边,所以你应该在MANIFEST.MF中引用驱动程序


    更多信息:

    你能发布完整的异常吗?特别是,引起异常的异常是什么。问题是,它不会引发异常-但InvocationTargetException是一个明显被实例化的异常。关于异常的更多详细信息肯定会有用-请参阅下面我的答案,以了解这方面的总体猜测可能没有足够的信息来提供实际帮助。是的,我的意思是两个不同的EAR。我正在编写web服务以及客户端。我必须查看清单;我已经查看了它,但从未真正知道它做了什么。