mehrdad2000 opened a new issue, #6102:
URL: https://github.com/apache/jmeter/issues/6102

   ### Expected behavior
   
   Hi
   I try  to use jms and mq plugin of jmeter to send message to my java app, 
like this:
   Jmeter > mq > java-app
   
   
   On java app got this error:
   
   2023-07-15 15:46:49,538 ERROR CUS-10636 [JmsListener] FATAL: exception in 
read message on listener: com.ibm.jms.JMSBytesMessage cannot be cast to 
javax.jms.TextMessage
   
   
   https://github.com/JoseLuisSR/mqmeter/issues/16
   
   
   
   
   Here is the code of java app:
   package mylib.platform.service.endpoint.jms;
   
   import mylib.common.boot.SystemVerifier;
   import mylib.common.exception.CommonExceptionCode;
   import mylib.common.exception.ExceptionLogger;
   import mylib.common.exception.MYRuntimeException;
   import mylib.common.monitoring.UniqueID;
   import mylib.common.platform.Constants;
   import mylib.common.platform.message.EndpointMessage;
   import mylib.common.util.str.StringUtility;
   import mylib.platform.domain.endpoint.Endpoint;
   import mylib.platform.domain.endpoint.Inpoint;
   import mylib.platform.domain.endpoint.Outpoint;
   import mylib.platform.service.core.MYCore;
   import mylib.platform.service.endpoint.EndpointService;
   import org.slf4j.Logger;
   import org.slf4j.LoggerFactory;
   import org.slf4j.MDC;
   
   import javax.annotation.PostConstruct;
   import javax.annotation.Resource;
   import javax.ejb.EJB;
   import javax.ejb.TransactionAttribute;
   import javax.ejb.TransactionAttributeType;
   import javax.jms.*;
   import java.io.UnsupportedEncodingException;
   import java.util.Date;
   import java.util.concurrent.atomic.AtomicInteger;
   
   @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
   public class JmsListener implements MessageListener {
   
       private static final Logger LOGGER = 
LoggerFactory.getLogger(JmsListener.class);
       private static AtomicInteger count = new AtomicInteger(0);
   
       @EJB
       private SystemVerifier systemVerifier;
   
       @EJB
       private MYCore myCore;
   
       @EJB
       private EndpointService endpointService;
   
       @Resource
       private String defaultName = "";
   
       private EndpointMessage extractEndpointMessage(Message message, Inpoint 
inpoint, long receiveTime) throws JMSException, UnsupportedEncodingException {
           String text;
           if (inpoint == null)
               throw new MYRuntimeException(CommonExceptionCode.NULL_POINTER, 
"JmsListener", "inpoint");
   
           if (inpoint.getMessageType() == Endpoint.MessageType.BYTE) {
               BytesMessage byteMessage = (BytesMessage) message;
               byte[] byteData = new byte[(int) byteMessage.getBodyLength()];
               byteMessage.readBytes(byteData);
               text = new String(byteData, inpoint.getEncoding());
           } else {
               text = ((TextMessage) message).getText();
           }
   
           Outpoint replyEndpoint = 
endpointService.getOutpoint(inpoint.getReplyEndpoint());
   
           Date arrivalTime = new Date(message.getJMSTimestamp());
           int expirationTime = inpoint.getTimeToLive();
   
           EndpointMessage em = new EndpointMessage(text, inpoint.getName(), 
replyEndpoint.getName(), arrivalTime, expirationTime);
           em.setReceiveTime(receiveTime);
           em.setCookie(extractCookie(message));
   
           if (!StringUtility.isNullOrEmpty(message.getJMSCorrelationID()))
               em.setCorrelationID(message.getJMSCorrelationID());
           else if (message.getJMSReplyTo() != null)
               em.setCorrelationID(message.getJMSMessageID());
   
           return em;
       }
   
       private String extractCookie(Message message) throws JMSException {
           Object obj = message.getObjectProperty(Constants.MY_COOKIE);
           if (obj == null)
               return null;
           if (!(obj instanceof String)) {
               throw new RuntimeException("Invalid Cookie");
           }
           return (String) obj;
       }
   
       private Inpoint extractInpoint(Message message) throws JMSException {
   
           String source = message.getStringProperty(Constants.SOURCE_NAME);
           if (StringUtility.isNullOrEmpty(source)) {
               
               if (message.getJMSDestination() != null) {
                   String destination = message.getJMSDestination().toString();
                   source = destination.substring(destination.lastIndexOf('/') 
+ 1);
               } else {
                   source = defaultName;
               }
           }
   
           Endpoint result = endpointService.getEndpointByQueueName(source);
           if (result == null || result instanceof Outpoint)
               throw new 
MYRuntimeException(CommonExceptionCode.INVALID_ENDPOINT_NAME, source);
           return (Inpoint) result;
       }
   
       @PostConstruct
       public void init() {
           if (systemVerifier != null)
               if (!systemVerifier.isReadyToStart())
                   LOGGER.error("NEVER HAPPENS");
               else
                   LOGGER.debug("################### MDB {} is ready to 
start...", count.incrementAndGet());
       }
   
       @Override
       public void onMessage(Message message) {
           EndpointMessage epMsg;
           try {
               //TODO check PCI constraint
               if (message == null)
                   throw new 
MYRuntimeException(CommonExceptionCode.NULL_POINTER, "JmsListener", "message");
   
               long receiveTime = System.currentTimeMillis();
   
               Inpoint inpoint = extractInpoint(message);
               MDC.put("source", inpoint.getName() + "-" + UniqueID.getNewID());
   
               epMsg = extractEndpointMessage(message, inpoint, receiveTime);
   
               String log = inpoint.isLogMessage() ? epMsg.getData() : 
StringUtility.getStarred(epMsg.getData(), 30);
               LOGGER.info("Receive Message[{}] Q[{}] CID[{}] Cookie[{}]", log, 
inpoint.getQueueName(), epMsg.getCorrelationID(), epMsg.getCookie());
   
               myCore.processEndpointMessage(epMsg);
   
           } catch (Exception e) {
               LOGGER.error("FATAL: exception in read message on listener: {}", 
e.getMessage());
               ExceptionLogger.log("FATAL: exception in read message on 
listener", e);
           } finally {
               MDC.clear();
           }
       }
   
   
   }
   
   
   Any Idea?
   Thanks
   
   ### Actual behavior
   
   _No response_
   
   ### Steps to reproduce the problem
   
   ….
   
   ### JMeter Version
   
   5.6.2
   
   ### Java Version
   
   _No response_
   
   ### OS Version
   
   _No response_


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@jmeter.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to