Java 无法分配类';它的实例';s接口类型

Java 无法分配类';它的实例';s接口类型,java,exception,classcastexception,osb,complex-event-processing,Java,Exception,Classcastexception,Osb,Complex Event Processing,在OSB(Oracle Service Bus)中,我使用了默认报告操作,但在控制台设置中禁用了默认报告提供程序,因此没有人从默认报告消息队列读取消息 现在,我尝试在OEP(Oracle事件处理)中使用JMS适配器从默认报告队列获取报告消息 我得到了消息,它是一条对象消息(com.bea.wli.reporting.jmsprovider.runtime.ReportMessage),在测试时,我只能通过调用objectMessage.getJMSMessageID()来显示消息ID,但当我可以

在OSB(Oracle Service Bus)中,我使用了默认报告操作,但在控制台设置中禁用了默认报告提供程序,因此没有人从默认报告消息队列读取消息

现在,我尝试在OEP(Oracle事件处理)中使用JMS适配器从默认报告队列获取报告消息

我得到了消息,它是一条对象消息(com.bea.wli.reporting.jmsprovider.runtime.ReportMessage),在测试时,我只能通过调用objectMessage.getJMSMessageID()来显示消息ID,但当我可以调用objectMessage.getObject()时,我在OEP服务器控制台中得到了这个异常。 代码抛出的异常对我来说不可见。以下是我得到的一个例外:

java.lang.RuntimeException: java.lang.ClassCastException: cannot assign instance of org.apache.xmlbeans.impl.values.XmlAnyTypeImpl 
to field com.bea.wli.reporting.jmsprovider.runtime.ReportMessage.metadata 
of type org.apache.xmlbeans.XmlObject in instance of com.bea.wli.reporting.jmsprovider.runtime.ReportMessage
但是Javadoc显示了这个
XmlAnyTypeImpl实现了XmlOjbect

package org.apache.xmlbeans.impl.values;

import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.SchemaType;  

public class XmlAnyTypeImpl extends XmlComplexContentImpl implements XmlObject
我对这一例外情况的理解是:

  • 我有一个接口a,类B实现了
  • 现在我有一个“b”,它是b的一个实例
  • 这个例外说明我不能将“b”赋值给类型为a的变量
这是正确的吗

如果我的理解是正确的,这怎么会发生。。。互联网上的一些人说可能这些都不是在同一个类加载器中加载的,我不太确定有没有一种方法可以控制它


我已经尝试将这个getObject调用放在一个单独的OSGi包中,看看这是否会迫使它使用一个类加载器,但我仍然得到相同的异常。

您确定
xmlanytypempl
实现的
xmlanytypempl
org.apache.xmlbeans.XMLObject
相同吗?如果相同的名称应用于不同包中具有相同名称的两个不同类,则可能会发生这种情况。使用“XmlObject”这样的通用名称并非不可能,还可以将导入添加到问题中。。似乎它们是名称相同但包不同的接口我刚刚添加了导入部分,这是从java文档中下载的,我下载了这个xmlbeans jar,我无法更改它。如果接口和实现来自不同的类加载器,可能会发生这种情况。这是“无法将X转换为X”问题的一个更微妙的版本。@JimGarrison是否存在这样的问题?我是否可以找出类是如何加载的,并强制它们加载到同一个类加载程序中?非常感谢。