2012-12-12 2 views
1

Je suis nouveau à RabbitMQ et j'essaye de "receiveAndConvert" à un type de mine fait sur commande: Person.java."receiveAndConvert" de RabbitMQ lève un ClassCastException

Voici mon producteur:

public class Producer { 

    public static void main(String[] args) { 
     ApplicationContext context = new GenericXmlApplicationContext("classpath:/applicationContext.xml"); 
     AmqpTemplate template = context.getBean(AmqpTemplate.class); 
     Person person = new Person(); 
     person.setAge(37); 
     person.setName("Julien"); 
     template.convertAndSend("myqueue", person); 
    } 

} 

et voici mon consommateur:

public class Consumer { 

    public static void main(String[] args) { 
     ApplicationContext context = new GenericXmlApplicationContext("classpath:/applicationContext.xml"); 
     AmqpTemplate template = context.getBean(AmqpTemplate.class); 
     Person me = (Person) template.receiveAndConvert("myqueue"); 
     System.out.println("Me: " + me.getName() + ":" + me.getAge()); 
    } 

} 

Mon Person.java est juste un POJO avec un nom et une instance d'âge variables

Je reçois un ClassCastException comme suit:

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to trc.suivi.amqp.Person 
    at trc.suivi.amqp.Consumer.main(Consumer.java:14) 

Notez que les classes de producteurs et consommateurs se trouvent dans deux projets différents et j'ai copié/collé de la classe Person.java sur le projet des consommateurs.

Mon config est la suivante:

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit" 
    xsi:schemaLocation="http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.1.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <rabbit:connection-factory id="connectionFactory" /> 
    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> 
    <rabbit:admin connection-factory="connectionFactory" /> 
    <rabbit:queue name="myqueue" /> 

</beans> 

Répondre

1

juste pour moi que ma Person.java a besoin pour mettre en œuvre la classe Serializable. Cela fonctionne maintenant.