我试图从 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/