为了账号安全,请及时绑定邮箱和手机立即绑定

无法将 ClassA 转换为 ClassA:java.lang.ClassCastException

无法将 ClassA 转换为 ClassA:java.lang.ClassCastException

慕斯王 2023-04-26 14:43:18
我有 Ejb webservice 项目和其他 web 项目,我通过 EAR 在 Wildfly 10.x 服务器上部署,war 项目和 Ejb 项目需要 oracle.sql.OPAQUE 通过 xdb jar 创建 xml 数据,对于 oracle.sql。不透明我在项目构建路径中添加了 ojdbc6,并将其添加到部署描述符中,我还在 wildfly 模块中添加了 ojdbc6 驱动程序,用于 jdbc 连接。在部署项目时,没有错误,而在运行页面时,我得到了oracle.sql.OPAQUE cannot be cast to oracle.sql.OPAQUE: java.lang.ClassCastException: oracle.sql.OPAQUE cannot be cast to oracle.sql.OPAQUE类加载器似乎已经加载了 oracle.sql.OPAQUE 两次,因此这是一个问题我曾尝试从部署描述符中删除 ojdbc6,但随后会在 EAR 部署本身上引发 noclassdefounderror。如果有人可以告诉我如何在 wildfly 服务器端解决这个类加载器问题,那将会很有帮助。或强制它从特定方面使用该类。非常感谢,请提供任何可能的链接,我将不胜感激。10:24:39,460 INFO  [icrCommon] (default task-8) ++++ QueryRequest queryXMLAccess() - ContextKey:256574422:190508:210142844 TypeId: 0 Channel: CAP10:24:40,521 SEVERE [com.sun.xml.ws.server.sei.EndpointMethodHandler] (default task-8) oracle.sql.OPAQUE cannot be cast to oracle.sql.OPAQUE: java.lang.ClassCastException: oracle.sql.OPAQUE cannot be cast to oracle.sql.OPAQUE    at com.att.icr.dataAccess.ICRDatabaseAccess.IcrActiveHistoryXMLQuery(ICRDatabaseAccess.java:2093)    at com.att.icr.icrservices.datamapping.ICRDataAccess.queryXMLAccess(ICRDataAccess.java:1161)    at com.att.icr.icrservices.ICRSoapHttpBindingImpl.queryICR(ICRSoapHttpBindingImpl.java:307)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

如您所知,Wildfly 具有模块化的类加载结构。每个模块都有自己的类加载器。类类型相同是不够的。在类加载器中必须相同。在JBoss 文档中:


WildFly 的类加载基于必须定义对其他模块的显式依赖项的模块。WildFly 中的部署也是模块,并且无法访问在应用程序服务器中的 jar 中定义的类,除非定义了对这些类的显式依赖。


您可以创建自定义模块并在此模块中提供 .ears 加载 jar。在$JBOSS_HOME/modules/com/example/main/中创建module.xml文件,将要加载的 jar 名称写入module.xml。


<module xmlns="urn:jboss:module:1.5" name="com.example">


<resources>

    <resource-root path="sample.jar"/>

</resources>

将jar复制到module.xml所在路径。


+-----com

     +-----example

           +-----main

                 module.xml

                 sample.jar

在 .ears 中创建部署描述符(jboss-deployment-structure.xml)并将您的模块添加到此文件中。


<?xml version="1.0" encoding="UTF-8"?>

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<deployment>

    <dependencies>

        <module name="com.example" export="true" />

    </dependencies>

</deployment>

</jboss-deployment-structure>

所以,Jar 的类加载器是相同的。



查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信