2017-04-11 5 views
2

Ich entwickle ein Testskript, um eine Nachricht mithilfe von IBM MQ API 8.0 in eine Warteschlange zu stellen. Ich verwende dafür JMeter 3.1 und Beanshell Sampler (siehe Code unten).Festlegen der Codierung in MQ-Headern mit Beanshell in Jmeter

Das Problem, das ich habe, setzt das "Encoding" -Feld in den MQ-Kopfzeilen. Ich habe verschiedene Methoden pro API-Dokumentation ausprobiert, aber nichts hat für mich funktioniert.

Hat jemand dieses Problem konfrontiert?

Vielen Dank im Voraus!

-Code unten:

try { 
     MQEnvironment.hostname = _hostname; 
     MQEnvironment.channel = _channel; 
     MQEnvironment.port = _port; 
     MQEnvironment.userID = ""; 
     MQEnvironment.password = ""; 

     log.info("Using queue manager: " + _qMgr); 
     MQQueueManager _queueManager = new MQQueueManager(_qMgr); 

     int openOptions = CMQC.MQOO_OUTPUT + CMQC.MQOO_FAIL_IF_QUIESCING + CMQC.MQOO_INQUIRE + CMQC.MQOO_BROWSE 
      + CMQC.MQOO_SET_IDENTITY_CONTEXT; 

     log.info("Using queue: " + _queueName + ", openOptions: " + openOptions); 
     MQQueue queue = _queueManager.accessQueue(_queueName, openOptions); 

     log.info("Building message..."); 
     MQMessage sendmsg = new MQMessage(); 
     sendmsg.clearMessage(); 

     // Set MQ MD Headers 
     sendmsg.messageType = CMQC.MQMT_DATAGRAM; 

     sendmsg.replyToQueueName = _queueName; 
     sendmsg.replyToQueueManagerName = _qMgr; 

     sendmsg.userId = MQuserId; 

     sendmsg.setStringProperty("BAH_FR", fromBIC); // from /AppHdr/Fr/FIId/FinInstnId/BICFI 
     sendmsg.setStringProperty("BAH_TO", toBIC); // from /AppHdr/To/FIId/FinInstnId/BICFI 
     sendmsg.setStringProperty("BAH_MSGDEFIDR", "pacs.008.001.05"); // from /AppHdr/MsgDefIdr 
     sendmsg.setStringProperty("BAH_BIZSVC", "cus.clear.01-" + bizSvc); // from /AppHdr/BizSvcr 
     sendmsg.setStringProperty("BAH_PRTY", "NORM"); // priority 
     sendmsg.setStringProperty("userId", MQuserId); // user Id 

     sendmsg.setStringProperty("ConnectorId", connectorId); 
     sendmsg.setStringProperty("Roles", roleId); 

     MQPutMessageOptions pmo = new MQPutMessageOptions(); // accept the defaults, same as MQPMO_DEFAULT constant 

     pmo.options = CMQC.MQOO_SET_IDENTITY_CONTEXT; // set identity context by userId 

     // Build message 
     String msg = "<NS1> .... </NS1>"; 

     // MQRFH2 Headers 
      sendmsg.format = CMQC.MQFMT_STRING; 
      //sendmsg.encoding = CMQC.MQENC_INTEGER_NORMAL | CMQC.MQENC_DECIMAL_NORMAL | CMQC.MQENC_FLOAT_IEEE_NORMAL; 
      sendmsg.encoding = 546; // encoding - 546 Windows/Linux 

      sendmsg.messageId = msgID.getBytes(); 
      sendmsg.correlationId = CMQC.MQCI_NONE; 

      sendmsg.writeString(msg); 

      String messageIdBefore = new String(sendmsg.messageId, "UTF-8"); 

      log.info("Before put, messageId=[" + messageIdBefore + "]"); 

      int depthBefore = queue.getCurrentDepth(); 
      log.info("Queue Depth=" + depthBefore); 
      log.info("Putting message on " + _queueName + ".... "); 
      queue.put(sendmsg, pmo); 
      int depthAfter = queue.getCurrentDepth(); 
      log.info("Queue Depth=" + depthAfter); 

      log.info("**** Done"); 

      String messageIdAfter = new String(sendmsg.messageId, "UTF-8"); 
      log.info("After put, messageId=[" + messageIdAfter + "]"); 

      log.info("Closing connection..."); 

    } catch (Exception e) { 
      log.info("\\nFAILURE - Exception\\n"); 
      StringWriter errors = new StringWriter(); 
      e.printStackTrace(new PrintWriter(errors)); 
      log.error(errors.toString()); 
    } 

Antwort

1

Ich glaube, Sie sind über das Problem nachzudenken. Wenn Sie keine seltsame manuelle Zeichen-/Datenkonvertierung durchführen, sollten Sie Folgendes verwenden:

sendmsg.encoding = MQC.MQENC_NATIVE; 
Verwandte Themen