我有一个使用 Oracle 数据库的简单 Web 服务。当我在内部测试该服务时,它工作正常,但是,通过我的客户端(在同一台计算机上但在不同的 WAR 中)调用 Web 服务会引发 incallingtargetexception。我终于发现这是实例化 OracleDriver 的问题。它根本不会抛出任何异常,所以我无法找出错误是什么。

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

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

我正在使用 jboss 部署服务,并将驱动程序 JAR 文件包含在源库中,但不包含服务器的驱动程序 JAR 文件。将驱动程序包含在 /jboss/server/default/lib 中解决了它。

有帮助吗?

解决方案

2个WAR中?我想你的ojdbc.jar位于Web服务的WAR的WEB-INF / lib目录内。

也许你的WAR是耳朵里面,所以你应该引用司机MANIFEST.MF。

更多信息: http://java.sun.com/j2ee/verified/ packaging.html

其他提示

如果没有更多的信息,很难提供具体的建议;然而,我有过使用 Oracle 驱动程序的经验,该驱动程序尝试通过本机 OCI 库进行连接,但无法找到系统上安装的这些库,并引发 InvocableTargetException。这一切都来自非常模糊的记忆,因此您的里程几乎肯定会有所不同。

已经有一段时间了,但如果我没记错的话,我遇到过一个连接 URL 配置不正确的情况,OracleDriver(或其包装器之一)迭代了一组可能的连接方法,试图找到一个有效的连接方法。在 URL 配置正确的情况下,它永远不会进行 OCI 尝试(首先进行精简连接方法尝试),但如果连接 URL 配置错误,精简尝试将失败,导致 OCI 尝试也失败因为主机上未安装 OCI 客户端(导致 InvocableTargetException。)

因此,需要检查一些事项:

  1. 连接 URL 是否有效?如果您在两个地方使用相同的连接 URL,您确定两个进程都绑定到同一个 NIC?如果它们绑定到不同的 NIC,即使在同一主机上,也可能会导致连接异常。
  2. 两种情况下的环境是否相同 - 如果 OCI 客户端在您的开发环境中使用,则它可能依赖于多个环境变量。如果这些环境变量在 servlet 容器运行的环境中设置不同,我会期望不同的行为。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top