2017-04-11 1 views
2

IBM MQ API 8.0を使用してメッセージをキューに入れるテストスクリプトを開発しています。私はこれにJMeter 3.1とBeanshell Samplerを使用しています(下記のコードを参照)。JmeterでBeanshellを使用してMQヘッダーでエンコーディングを設定する方法

私が抱えている問題は、MQヘッダーに「エンコード」フィールドを設定していることです。私はAPIのドキュメントごとに異なるメソッドを試しましたが、何も私のために働いた。

誰もこの問題に直面しましたか?

ありがとうございます!

以下のコード:

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()); 
    } 

答えて

1

私はあなたの問題を考える上だと思います。奇妙な手動文字/データ変換を行わない場合は、次のようにしてください。

sendmsg.encoding = MQC.MQENC_NATIVE; 
関連する問題