xml - ODI-1227 : ActiveMQObjectMessage cannot be cast to javax. jms.BytesMessage

标签 xml jms activemq classcastexception oracle-data-integrator

我试图从 JMS 队列中获取 (Oracle Data Integrator 12.1.2.0.0) XML,支持 Apache ActiveMQ 5.8,但出现以下错误:

ODI-1227: Task LKM JMS XML to SQL (Load JMS to XML) fails on the source <Empty Value> connection JMS_ActiveMQ_INVOICE_LOCAL2_CNG.
Caused By: java.sql.SQLException: java.lang.ClassCastException: org.apache.activemq.command.ActiveMQObjectMessage cannot be cast to javax.jms.BytesMessage
at com.sunopsis.jdbc.driver.SnpsDriverStatement.executeQuery(SnpsDriverStatement.java:110) 
at com.sunopsis.jdbc.driver.SnpsDriverPreparedStatement.executeQuery(SnpsDriverPreparedStatement.java:139)
at com.sunopsis.jdbc.driver.JMSXMLStatement.loadJMS(JMSXMLStatement.java:687)
at com.sunopsis.jdbc.driver.JMSXMLStatement.execute(JMSXMLStatement.java:159)
at oracle.odi.runtime.agent.execution.sql.SQLCommand.execute(SQLCommand.java:205)...

JMS 队列是外部系统,我无法更改消息类型。 LKM JMS XML to SQL 知识模块是否可以处理消息 org.apache.activemq.command.ActiveMQObjectMessage 类,它实现了接口(interface)javax.jms.BytesMessage,如果可以,如何配置?

因为实现接口(interface)javax.jms.TextMessage知识模块的org.apache.activemq.command.ActiveMQTextMessage类的消息LKM JMS XML转SQL成功处理。

我该如何解决这个问题。

问候, 阿扎马特

最佳答案

我遇到了同样的问题并通过添加检查在调用中返回哪种类型的实例来解决它。

if (message instanceof ActiveMQTextMessage) {
    ActiveMQTextMessage amqMessage = (ActiveMQTextMessage) message;
    mqDelegate.execute(params, amqMessage.getText());
} else {
    BytesMessage bm = (BytesMessage) message;
    byte data[] = new byte[(int) bm.getBodyLength()];
    bm.readBytes(data);
    mqDelegate.execute(params, new String(data));
}

如果有更好的解决方案,请告诉我。

关于xml - ODI-1227 : ActiveMQObjectMessage cannot be cast to javax. jms.BytesMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31779192/

相关文章:

ruby-on-rails - Rails嵌套资源: Input vs.输出格式不一致

xml - 如何将 child 添加到特定位置的节点?

c++ - 在 Qt 中解析 XML 文件

java - 是否可以从另一个应用程序(在单独的进程中启动)连接到 spring boot 嵌入式 ActiveMQ 实例?

java - activemq jdbc 性能/延迟

xml - 什么是用 grails 制作 XML 的好方法

java - 使用 JMS 监听器自动刷新 Wicket 组件

queue - ActiveMQ:一个待处理的消息,但队列为空

java - 无法将 类型的对象转换为 JMS 消息。支持的消息有效负载为 : String, 字节数组、Map<String,?>、可序列化对象

activemq - ActiveMQ从Java删除队列