gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:39:06 25 4
gpt4 key购买 nike

我有 Ejb webservice 项目和其他 web 项目,我正在通过 EAR 在 Wildfly 10.x 服务器上部署它们,war 项目和 Ejb 项目需要 oracle.sql.OPAQUE 通过 xdb jar 创建 xml 数据,对于 oracle.sql.OPAQUE 我已在项目构建路径中添加了 ojdbc6 并将其添加到部署描述符中,我还在 Wildfly 模块中添加了 ojdbc6 驱动程序,用于 jdbc 连接。部署项目时,没有错误,在运行页面时,我收到 oracle.sql.OPAQUE Cannot be Cast to oracle.sql.OPAQUE: java.lang.ClassCastException: oracle.sql.OPAQUE Cannot转换为 oracle.sql.OPAQUE

类加载器似乎已加载 oracle.sql.OPAQUE 两次,因此这是一个问题

  1. 我尝试从部署描述符中删除 ojdbc6,但是那么 EAR 部署本身就会抛出 noclassdeffounderror。
  2. 如果有人可以告诉我如何解决这个类加载器问题,在 Wildfly 服务器端,这会很有帮助。
  3. 或者强制它使用特定方面的类。

非常感谢,请提供任何可能的链接,我将不胜感激。

10:24:39,460 INFO  [icrCommon] (default task-8) ++++ QueryRequest queryXMLAccess() - ContextKey:256574422:190508:210142844 TypeId: 0 Channel: CAP
10: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)

最佳答案

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

WildFly's class loading is based on modules that have to define explicit dependencies on other modules. Deployments in WildFly are also modules, and do not have access to classes that are defined in jars in the application server unless an explicit dependency on those classes is defined.

您可以创建自定义模块并在此模块中提供 .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-struct.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 的类加载器是相同的。您可以查看this exampleredhat doc .

关于java - ClassA 无法转换为 ClassA : java. lang.ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57247767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com