【问题标题】:ClassCastException with EAR and external WAR带有 EAR 和外部 WAR 的 ClassCastException
【发布时间】:2013-12-19 09:08:19
【问题描述】:

我们曾经有一个包含 EJB jar 和 WAR 的 EAR。我们从 EJB 向 WAR 发送了一个 dto 类。一切都很好。

现在我们尝试从 EAR 中提取 WAR 并创建 WAR 使用的 EJB 客户端(API jar)。这个 API jar 包含我们从 EJB 发送到 WAR 的 dto 类。 在 EAR 中,API 部署在 lib 目录中。
在 WAR 中,我们在 WEB-INF/lib 目录中有相同的 API jar。
但是现在我们在访问 dto 类的内部时得到了 ClassCastException。

对 EJB 的方法调用正常,我们可以在 WAR 中分配结果列表。但是当我们尝试从 DTO 类中读取一个值时,我们会得到 ClassCastException。
我们一遍又一遍地检查,所以 API jar 不会在 EAR 或 WAR 的某个地方导入两次。但现在我们正处于放弃的边缘。

有人知道我们做错了什么吗?

【问题讨论】:

  • 好的,所以我得到了类名,它们是相同的,就像我们在调试时看到的一样......这是我们得到的异常。错误::java.lang.ClassCastException:com.xxx.admintool2.service.dataroaming.dto.LegalEntityDTO 无法转换为 com.xxx.admintool2.service.dataroaming.dto.LegalEntityDTO

标签: java ejb war ear


【解决方案1】:

“当我们尝试从 DTO 类中读取值时,我们得到 ClassCastException”

只需将其作为对象获取/读取,例如 obj,然后在您的
中打印其类型 日志或控制台上(当然,在你得到异常之前记录它)
这样的事情应该会有所帮助:obj.getClass().getName()
然后查看您的代码并查看:1) 您在代码中将其转换为什么
或 2) 分配给您在代码中分配的变量类型。
这(加上您可能拥有的堆栈跟踪)应该会有所帮助
您确定为什么会出现此异常。

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2011-10-20
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多