无法将类的实例分配给它的接口类型

时间:2015-12-10 16:05:28

标签: java exception classcastexception osb complex-event-processing

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

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

我收到了消息,它是一个对象消息(com.bea.wli.reporting.jmsprovider.runtime.ReportMessage),测试时我只能通过调用objectMessage.getJMSMessageID()来显示messageId,但是当我可以调用时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 implements 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类实现了A
  • 现在我有一个" b"这是B
  • 的一个例子
  • 这个例外是说我不能分配" b"到一个类型为A的变量。

这是对的吗?

如果我的理解是正确的,那怎么可能发生......互联网上的一些人说可能是这些没有加载到同一个类加载器中,我不太确定有没有办法可以控制它?

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

0 个答案:

没有答案