>

일부 MQ 큐 연결을 작성 중입니다. queueReceiver.Receivenowait() 에서 JMS 텍스트 메시지로 메시지 큐를 캐스트해야합니다. .

queueReceiver.Receivenowait() 때문에  형식은 바이트입니다. 메시지를 배열 목록으로 나누려면 Textmessage로 변환해야합니다.

이미 사용하고 있습니다 :

queueReceiver = queueSession.createReceiver(ringQueue);

바이트 메시지를 받으려면 JMS 문자 메시지로 변환해야합니다 :

List<String> outputList = new ArrayList<String>();
while (loop) {
   TextMessage msgResponse = (TextMessage) bytesMessage;
   if (msgResponse.getText() == null) {
      loop = false;
   } else {
      message = msgResponse.getText();
      outputList.add(message);
      msgResponse.acknowledge();
   }
}

이 오류 코드가 있습니다 :

java.lang.ClassCastException: com.ibm.jms.JMSBytesMessage cannot be cast to javax.jms.TextMessage

  • 답변 # 1

    제 생각 엔 당신이 정말로 BytesMessage 를 변환하고 싶지 않다는 것입니다   TextMessageBytesMessage 에서 바이트 배열을 변환하려고합니다.   String 에 . 이것이 사실이라면 다음과 같은 코드를 사용할 수 있습니다 :

    List<String> outputList = new ArrayList<String>();
    while (loop) {
       if (bytesMessage instanceof BytesMessage) {
          BytesMessage msgResponse = (BytesMessage) bytesMessage;
          if (msgResponse.getBodyLength() == 0) {
             loop = false;
          } else {
             byte[] bytes = new byte[(int) msgResponse.getBodyLength()];
             msgResponse.readBytes(bytes);
             outputList.add(new String(bytes));
             msgResponse.acknowledge();
          }
       }
    }
    
    

    물론, bytesMessage  루프를 통해 매번 다른 메시지가되어야합니다.

  • 답변 # 2

    BytesMessage의 API 문서를 보면 가능한 방법이있을 수 있습니다. 그저 단순히 메시지에서 바이트를 읽고 new String(bytes, charset) 를 사용하여  옵션입니다.

    일반적으로 수신 메시지를 확인하여 유형이 예상과 일치하는지 확인하는 것이 좋습니다.

    if (message instanceof TextMessage) ...
    
    

    네거티브 케이스를 적절하게 처리 할 수있는 방법입니다.

  • 이전 android - tess-two에서 텍스트와 boxRect를 올바르게 추출하는 방법은 무엇입니까?
  • 다음 mongodb upsert 카운터가 실제 변경 사항을 반영하지 않는 이유는 무엇입니까?