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
我遇到了同样的问题,并通过添加对调用中返回的实例类型的检查来解决它。
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)
让我知道是否有更好的解决方案。
| 归档时间: |
|
| 查看次数: |
3998 次 |
| 最近记录: |