Jason

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

IBM WEBSPHERE MQ 接收消息中文乱码问题的处理

第一次接触WebSphere MQ,C#的程序总是报错,后来改用java写。但发现一个问题,如果接收时用readFully方法接收字符串,消息里的中文会出现乱码,就是将取到的bytes再转码也无济于事。
出现问题的代码:
            int size = rcvMessage.getMessageLength();
            byte[] p = new byte[size];
            rcvMessage.readFully(p);
费了半天劲,最后在IBM论坛上找到了解决方法。就是发送和接收都用Object。
完整发送代码:

import com.ibm.mq.*;
import java.util.Hashtable;


public class MQSendMessageUtil {
    
public MQSendMessageUtil() {
        
try {
            jbInit();
        }
 catch (Exception ex) {
            ex.printStackTrace();
        }

    }


               
// define MQ Server Host Name
        private static final String hostname = "192.168.19.2";

        
// define MQ Queue Manager Listen Port
        private static final String port = "1414";

        
private static final String channel = "S_mq";

        
private static final String transport = "MQSeries";

        
// define the name of the QueueManager
        private static final String qManager = "QM_mq";

        
// and define the name of the Queue
        private static final String qName = "Example";

        
public static void sendMessage(Object object) throws Exception {

                MQQueueManager qMgr 
= null;

                
try {

                        
// Create a connection to the QueueManager
                        Hashtable properties = new Hashtable();

                        properties.put(
"hostname", hostname);
                        properties.put(
"transport", transport);
                        properties.put(
"channel", channel);
                        properties.put(
"port"new Integer(Integer.parseInt(port)));
                        properties.put(
"CCSID"new Integer(1381));

                        qMgr 
= new MQQueueManager(qManager, properties);

                        
// Set up the options on the queue we wish to open
                        int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

                        
// Now specify the queue that we wish to open and the open options

                        MQQueue queue 
= qMgr.accessQueue(qName, openOptions);

                        
// Define a simple WebSphere MQ Message 
                        MQMessage msg = new MQMessage();

                        msg.writeObject(object);
                        
// Specify the default put message options
                        MQPutMessageOptions pmo = new MQPutMessageOptions();

                        
// Put the message to the queue
                        queue.put(msg, pmo);

                        queue.close();

                        
// Disconnect from the QueueManager

                        
// qMgr.disconnect();

                }
 catch (MQException ex) {
                        ex.printStackTrace();
                }
 catch (java.io.IOException ex) {

                        ex.printStackTrace();
                }
 finally {
                        qMgr.disconnect();
                }

        }


        
public static void main(String[] args)
        
{
                
try
                
{
                        MQSendMessageUtil.sendMessage(
"MQ_sys_msg");
                }

                
catch(Exception e)
                
{
                        e.printStackTrace();
                }

                System.out.println(
"MQ_sys_msg");
        }


    
private void jbInit() throws Exception {
    }


}

完整的接收代码:

import com.ibm.mq.*;
import java.util.Hashtable;

public class MQReceiveMessageUtil {

    
// define MQ Server Host Name
    private static final String hostname = "192.168.19.2";

    
// define MQ Queue Manager Listen Port
    private static final String port = "1414";

    
private static final String channel = "S_mq";

    
private static final String transport = "MQSeries";

    
// define the name of the QueueManager
    private static final String qManager = "QM_mq";

  
public static Object receiveMessage(String queueName) throws Exception {    
        MQQueueManager qMgr 
= null;

        
try {
            Hashtable properties 
= new Hashtable();

            properties.put(
"hostname", hostname);
            properties.put(
"transport", transport);
            properties.put(
"channel", channel);
            properties.put(
"port"new Integer(Integer.parseInt(port)));
            properties.put(
"CCSID"new Integer(1381));

            
//pw.println("Connecting to queue manager: "+qManager+"<br>");
            qMgr = new MQQueueManager(qManager, properties);

            
// Set up the options on the queue we wish to open
            int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_OUTPUT;

            
// Now specify the queue that we wish to open and the open options
            
//pw.println("Accessing queue: "+qName+"<br>");
            MQQueue queue = qMgr.accessQueue(queueName, openOptions);

            
// Now get the message back again. First define a WebSphere MQ message
            
// to receive the data
            MQMessage rcvMessage = new MQMessage();

            
// Specify default get message options
            MQGetMessageOptions gmo = new MQGetMessageOptions();

            queue.get(rcvMessage, gmo);

            
//int size = rcvMessage.getMessageLength();
            
//byte[] p = new byte[size];
            
//rcvMessage.readFully(p);
            
            Object obj 
= rcvMessage.readObject();
            queue.close();

            qMgr.disconnect();
            
//return p;
            return obj;
            
        }
 catch (MQException ex) {
            ex.printStackTrace();
            
return null;
        }
 catch (java.io.IOException ex) {
            ex.printStackTrace();
            
return null;
        }

        
finally
        
{
            qMgr.disconnect();
        }

    }


    
public static void main(String[] args)
    
{
        
try
        
{
            String _str 
= new String(MQReceiveMessageUtil.receiveMessage("Example"));
            System.out.print(_str);

        }

        
catch(Exception e)
        
{
            e.printStackTrace();
        }

    }

}




 

posted on 2006-03-01 12:02  Jsang  阅读(3926)  评论(1)    收藏  举报