首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将ClassA转换为ClassA : java.lang.ClassCastException

不能将ClassA转换为ClassA : java.lang.ClassCastException
EN

Stack Overflow用户
提问于 2019-07-29 05:44:52
回答 1查看 715关注 0票数 0

我有Ejb项目和其他web项目,我通过EAR部署在Wildfli10.x服务器上,war项目和Ejb项目需要oracle.sql.OPAQUE来通过xdb jars创建xml数据,对于oracle.sql.OPAQUE,我在项目构建路径中添加了ojdbc6并将其添加到部署描述符中,我还为jdbc连接在通配符模块中添加了ojdbc6驱动程序。在部署项目时,没有出现错误,在运行页面时,我得到的是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部署本身上抛出noclassdeffounderror。
  2. 如果有人能告诉我如何解决这个类加载程序问题,在通配符服务器端,这将是有帮助的。
  3. 或者强迫它从特定的侧面使用类。

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-29 07:00:56

这个问题与野生苍蝇中的类加载问题有关。如您所知,Wildfly有一个模块化的类加载结构。每个模块都有自己的Classloader。仅仅是类类型相同是不够的。在Classloaders中肯定是一样的。在JBoss文档

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

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

代码语言:javascript
复制
<module xmlns="urn:jboss:module:1.5" name="com.example">

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

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

代码语言:javascript
复制
+-----com
     +-----example
           +-----main
                 module.xml
                 sample.jar

在.ears中创建部署描述符(JBoss-Deployment-structure.xml),并将模块添加到这个文件中。

代码语言:javascript
复制
<?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的类装载机是一样的。您可以查看这个例子红帽医生

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57247767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档