Seleccionar página

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…

Share