ClassCastException using same jar file
pasalic.zaharije Oct 27, 2008 6:21 PMHi,
we are developing out project from 3 different eclipse projects. One is utils project which expose common.jar file. This file has simple interface that implements Serializable and class which implement :
public interface PublishCommand extends Serializable {
// some methods
}
public class PublishBaseCommand implements PublishCommand {
private String operationType;
public PublishBaseCommand() {
}
// some get/set methods
}This will be class which will be sanded into queue1.
Also, there is second project - Web application (on Spring) which instantiate upper class and send it to queue1. Deploy file is .war, and it contain common.jar in it's WEB-INF/lib path. Code for sending message:
try {
jmsDistributionTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
ObjectMessage oMessage = session.createObjectMessage();
oMessage.setObject(new PublishBaseCommand() );
return oMessage;
}
});
}
catch(JmsException e) {
// ...
}
Third application is also Web application (also on Spring). This application contains listener:
public void onMessage(Message message) {
if (message instanceof ObjectMessage) {
try {
ObjectMessage objectMessage = (ObjectMessage)message;
log.info("MSG === " + objectMessage.getObject());
log.info("MSG HASH === " + objectMessage.getObject().getClass().hashCode());
log.info("NED HASH === " + PublishBaseCommand.class.hashCode());
PublishBaseCommand= (PublishBaseCommand)objectMessage.getObject();
}
catch(JMSException e) {
// ...
}
}
}main problem is in thrid application - in part where we call getObject and convert it to PublishBaseCommand - we got ClassCastException:
[Thread-22] listener.SimpleMessageListenerContainer (AbstractMessageListenerContainer.java:634) - Execution of JMS message listener failed java.lang.ClassCastException: publishing.service.impl.PublishBaseCommand at updater.service.impl.PublishListenerImpl.onMessage(PublishListenerImpl.java:33) at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:531) at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:466) at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:435) at org.springframework.jms.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:407) at org.springframework.jms.listener.SimpleMessageListenerContainer.processMessage(SimpleMessageListenerContainer.java:290) at org.springframework.jms.listener.SimpleMessageListenerContainer$2.onMessage(SimpleMessageListenerContainer.java:266) at org.jboss.jms.client.remoting.MessageCallbackHandler.callOnMessage(MessageCallbackHandler.java:153) at org.jboss.jms.client.remoting.MessageCallbackHandler$ListenerRunner.run(MessageCallbackHandler.java:884) at EDU.oswego.cs.dl.util.concurrent.QueuedExecutor$RunLoop.run(QueuedExecutor.java:89) at java.lang.Thread.run(Unknown Source)
Also following output is traced from upper log.info:
MSG === publishing.service.impl.PublishBaseCommand@126cb1a MSG HASH === 13712958 NEED HASH === 13628909
P.S.
I removed most of the code for readability.
Thanks,
Zaharije Pasalic