Seleccionar página

JBoss 4.0.x – EJB3 – MDB – @MessageDriven – java.lang.IllegalArgumentException: wrong number of arguments

por | Ene 17, 2007 | General

Me he llevado la siguiente sorpresita en el siguiente MDB que ejecutaba en JBoss 4.0.5: java.lang.IllegalArgumentException: wrong number of arguments

El código era el siguiente:

package com.neodoo.callcenter.server.listener;

import com.neodoo.centralita.client.ApduCentralita;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

/**
 * Implementa un CallCenterMessageListerner a traves de JMS
 * @author Manuel Aznar Perez
 */

@MessageDriven(mappedName = "topic/CentralitaOutTopic",
    activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/CentralitaOutTopic")//,
        //@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable")//,
        //@ActivationConfigProperty(propertyName = "clientId", propertyValue = "Topic1"),
        //@ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "Topic1")
    }
)
public class CallCenterMessageListenerImpl implements MessageListener {

    /** Listener de la centralita */
    private CallCenterMessageListener messageListener;

    /** Crea una nueva instancia de CallCenterMessageListenerJMS */
    public CallCenterMessageListenerImpl(CallCenterMessageListener messageListener) {
        this.messageListener = messageListener;
    }

    /** Se ejecuta cuando se recibe un mensaje JMS */
    public void onMessage(Message message) {

        ObjectMessage objMessage = (ObjectMessage) message;

        try {

            // Comprobaciones de que el objeto no es nulo y es una instancia de ApduCentralita
            if ((objMessage == null)||(!(objMessage.getObject() instanceof ApduCentralita)))
                return;

            ApduCentralita apdu = (ApduCentralita) objMessage.getObject();
            messageListener.recibir(apdu);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

… dando el siguiento error en la consola de JBoss AS:

23:16:21,568 ERROR [JmsServerSession] Unexpected error delivering message org.jboss.mq.SpyObjectMessage {
Header {
   jmsDestination  : TOPIC.CentralitaOutTopic
   jmsDeliveryMode : 2
   jmsExpiration   : 0
   jmsPriority     : 4
   jmsMessageID    : ID:7-11690721815655
   jmsTimeStamp    : 1169072181565
   jmsCorrelationID: null
   jmsReplyTo      : null
   jmsType         : null
   jmsRedelivered  : false
   jmsProperties   : {cliente=null, puerto=2555, host=192.168.1.99}
   jmsPropReadWrite: false
   msgReadOnly     : true
   producerClientId: ID:7
}
}
java.lang.IllegalArgumentException: wrong number of arguments
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at org.jboss.ejb3.EJBContainer.construct(EJBContainer.java:415)
        at org.jboss.ejb3.AbstractPool.create(AbstractPool.java:66)
        at org.jboss.ejb3.StrictMaxPool.get(StrictMaxPool.java:122)
        at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:54)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
        at org.jboss.ejb3.mdb.MessagingContainer.localInvoke(MessagingContainer.java:245)
        at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.delivery(MessageInflowLocalProxy.java:268)
        at org.jboss.ejb3.mdb.inflow.MessageInflowLocalProxy.invoke(MessageInflowLocalProxy.java:138)
        at $Proxy97.onMessage(Unknown Source)
        at org.jboss.resource.adapter.jms.inflow.JmsServerSession.onMessage(JmsServerSession.java:183)
        at org.jboss.mq.SpyMessageConsumer.sessionConsumerProcessMessage(SpyMessageConsumer.java:905)
        at org.jboss.mq.SpyMessageConsumer.addMessage(SpyMessageConsumer.java:170)
        at org.jboss.mq.SpySession.run(SpySession.java:323)
        at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:249)
        at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204)
        at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275)
        at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:743)
        at java.lang.Thread.run(Thread.java:595)

.. y resulta que siempre ha de existir un constructor con parámetros de entrada vacíos o da el error mencionado tan rarito:

...

    /** Constructor */
    public CallCenterMessageListenerImpl() {
    }

...

Chorrón a más no poder pero me he comido unas cuantas horitas…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Blog de Neodoo Microsystems
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles. Puedes encontrar más información en nuestra Política de privacidad y Política de cookies.