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

我有 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 两次,因此这是一个问题

  1. 我曾尝试从部署描述符中删除 ojdbc6,但随后会在 EAR 部署本身上引发 noclassdefounderror。

  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)


慕斯王
浏览 102回答 1
1回答

MYYA

如您所知,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 的类加载器是相同的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java