ODI-1227:ActiveMQObjectMessage无法转换为javax.jms.BytesMessage

aza*_*t7r 4 xml activemq-classic jms classcastexception oracle-data-integrator

我正在尝试从JMS队列中的XML中获取(Oracle Data Integrator 12.1.2.0.0),并为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)...
Run Code Online (Sandbox Code Playgroud)

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

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

我该如何解决这个问题。

问候,Azamat

Ami*_*mar 6

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

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));
}
Run Code Online (Sandbox Code Playgroud)

让我知道是否有更好的解决方案。