JBoss 4.0.x – EJB3 – MDB – @MessageDriven – java.lang.IllegalArgumentException: wrong number of arguments
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…
Conocimiento Open Source
Desde siempre intentamos aplicar la filosofía Open Source también con el conocimiento, por ello nació el Blog Open Source, donde nuestros desarrolladores comparten notas, consejos y tutoriales sobre tecnología y desarrollo, soluciones a problemas diarios, bugs o cualquier información que creemos, puede ser interesante.



0 comentarios