0

そのため、メッセージを WebSphere に送信し、それを正常にキューに入れました。ただし、別のキューから取得する際に問題があります。しかし、次の行を使用してメッセージを送信したときに気づいたこと:

inputMessage.writeUTF(message);

メッセージは次のとおりです。

basket/argos/1001?authToken=fgTSdfs&trustToken=gdf43FsfSFefs33&apiKey=ahjd9234imnmdfnwi&sig=abcde&currency=GBP

これはxmlファイルに保存され、メッセージの先頭に「n」が追加されています。誰でも理由を教えてもらえますか? コードは以下のとおりです。

    MQQueueConnectionFactory cf = new MQQueueConnectionFactory();

    // Config
    cf.setHostName(hostname);
    cf.setPort(portNumber);
    cf.setQueueManager(queueManager);
    cf.setChannel(channel);

    //MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
    //MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
    //MQQueue queue = (MQQueue) session.createQueue(inputQueue);
    //MQQueue queue = (MQQueue)session.
    //MQQueueSender sender =  (MQQueueSender) session.createSender(queue);
    //MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);    


    MQQueueManager qMgr = new MQQueueManager(queueManager);
    System.out.println("Queue manager created");

    int openOptions = MQC.MQOO_INPUT_AS_Q_DEF |  
    MQC.MQOO_OUTPUT ;  
    System.out.println("MQ Options created");

    MQQueue mqInputQueue =  
        qMgr.accessQueue(inputQueue,  
                openOptions);

    System.out.println("Queue created");

    MQMessage inputMessage = new MQMessage();
    inputMessage.writeUTF(message);
    System.out.println("message created and sent");

    MQPutMessageOptions pmo = new MQPutMessageOptions();  // accept the defaults,  
    // same as  
    // MQPMO_DEFAULT  
    // constant  
    System.out.println("Queue options created");

    // put the message on the queue  
    mqInputQueue.put(inputMessage,pmo);
    System.out.println("Message put on queue");
    mqInputQueue.close();  
4

1 に答える 1

3

受信したメッセージをどのように読んでいますか? readUTFメソッドを使用していますか?メッセージの送信中に使用した場合は、受信後にメッセージ本文を取得するメソッドwriteUTFを使用する必要があります。readUTF「n」は、実際には XML メッセージの長さである可能性があります。UTF 文字列では、最初の 2 バイトが後続の文字列の長さを示しているためです。

于 2013-07-24T16:55:38.320 に答える