| Author | Message | 
		
		  | fredand44 | 
			  
				|  Posted: Tue Feb 21, 2006 5:06 am    Post subject: How to extract the text from a TextMessage? |   |  | 
		
		  | Acolyte
 
 
 Joined: 14 Feb 2006Posts: 63
 
 
 | 
			  
				| Hello! 
 We have some problem with sending a message from WAS to MQ and forward to WAS again.
 
 We can not extract the text from an TextMessage.
 
 Sent message from WAS (the text=1140526528099):
 [2006-02-21 13:55:33:958 CET] 00000037 SystemOut     O The message
 
 JMSMessage class: jms_text
 JMSType:          JMSC.MQJMS_CLIENT_NONJMS_MQ
 JMSDeliveryMode:  1
 JMSExpiration:    0
 JMSPriority:      4
 JMSMessageID:     ID:1ce2eb5f73c2db81fbf26591110a134f0000000000000001
 JMSTimestamp:     1140526533943
 JMSCorrelationID: null
 JMSDestination:   queue://DToQ?busName=WSBus&readAhead=AlwaysOn
 JMSReplyTo:       null
 JMSRedelivered:   false
 JMSXUserID:
 JMSXAppID: Service Integration Bus
 1140526528099
 
 Received message from MQ:
 [2006-02-21 13:55:47:973 CET] 00000051 SystemOut     O The message:
 
 JMSMessage class: jms_text
 JMSType:          null
 JMSDeliveryMode:  1
 JMSExpiration:    0
 JMSPriority:      4
 JMSMessageID:     ID:1ce2eb5f73c2db81fbf26591110a134f0000000000000001
 JMSTimestamp:     1140526533094
 JMSCorrelationID: null
 JMSDestination:   queue://QTOD?busName=WSBus&readAhead=AlwaysOn
 JMSReplyTo:       null
 JMSRedelivered:   false
 JMS_IBM_Encoding: 273
 JMS_IBM_System_MessageID: BC73EA21F0444ABE_10000016
 JMS_IBM_MsgType: 0
 JMSXUserID:
 JMS_IBM_PutTime: 12553394
 JMS_IBM_PutApplType: 31
 JMS_IBM_Format: MQSTR
 JMS_IBM_PutDate: 20060221
 JMSXAppID: Service Integration Bus
 JMS_IBM_Character_Set: 1208
 
 
 It looks like the message gets encoded or something. We have tried 2 different types of the TextMessage before we send it:
 outMessage.setJMSType("JMSC.MQJMS_CLIENT_NONJMS_MQ");
 or
 outMessage.setJMSType("package_received");
 
 So if any one know how to be able to extract the text please let us know. Any explantion is also welcome!
 
 Best regards
 Fredrik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mvic | 
			  
				|  Posted: Tue Feb 21, 2006 5:39 am    Post subject: Re: How to extract the text from a TextMessage? |   |  | 
		
		  |  Jedi
 
 
 Joined: 09 Mar 2004Posts: 2080
 
 
 | 
			  
				| 
   
	| fredand44 wrote: |  
	| We can not extract the text from an TextMessage. |  Have you tried javax.jms.TextMessage.getText() ?
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | fredand44 | 
			  
				|  Posted: Tue Feb 21, 2006 5:47 am    Post subject: This is our code... |   |  | 
		
		  | Acolyte
 
 
 Joined: 14 Feb 2006Posts: 63
 
 
 | 
			  
				| Hello! Thanks for your reply.
 
 This is our code:
 
 Receiving:
 try
 {
 String JMSCF_JNDI_NAME = "jms/WSFactory";
 String JMSQ_JNDI_NAME = "jms/WSQueue2";
 
 InitialContext initCtx = new InitialContext();
 javax.jms.ConnectionFactory qcf = (javax.jms.ConnectionFactory) initCtx.lookup(JMSCF_JNDI_NAME);
 Destination q = (Destination) initCtx.lookup(JMSQ_JNDI_NAME);
 Connection connection = qcf.createConnection();
 Session ssession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 MessageConsumer queueReceiver = ssession.createConsumer(q);
 
 connection.start();
 Message message = queueReceiver.receiveNoWait();
 
 if (message != null)
 {
 message.setJMSType("JMSC.MQJMS_CLIENT_NONJMS_MQ");
 if (message instanceof ObjectMessage)
 {
 System.out.println("ObjectMessage");
 messageText = (String) ((ObjectMessage)message).getObject();
 }
 
 else if (message instanceof MapMessage)
 {
 System.out.println("MapMessage");
 messageText = (String) ((MapMessage)message).getObject("messageString");
 }
 else if (message instanceof BytesMessage)
 {
 System.out.println("BytesMessage");
 byte[] bytes = new byte[2000];
 ((BytesMessage)message).readBytes(bytes);
 messageText = new String(bytes);
 }
 else if (message instanceof StreamMessage)
 {
 System.out.println("StreamMessage");
 messageText = ((StreamMessage)message).readString();
 }
 else if (message instanceof TextMessage)
 {
 System.out.println("TextMessage");
 messageText = ((TextMessage)message).getText();
 }
 else
 {
 System.out.println("Something else: " + message.getClass().getName());
 }
 }
 else
 {
 System.out.println("The message is null!!");
 }
 
 System.out.println("The message:\n" + message);
 System.out.println("The text:\n" + messageText);
 
 queueReceiver.close();
 ssession.close();
 connection.close();
 System.out.println("Recv completed");
 }
 catch(Exception e)
 {
 e.printStackTrace();
 }
 
 Sending:
 try
 {
 String JMSCF_JNDI_NAME = "jms/WSFactory";
 String JMSQ_JNDI_NAME = "jms/WSQueue";
 
 InitialContext initCtx = new InitialContext();
 javax.jms.ConnectionFactory qcf = (javax.jms.ConnectionFactory) initCtx.lookup(JMSCF_JNDI_NAME);
 
 Destination q = (Destination) initCtx.lookup(JMSQ_JNDI_NAME);
 
 Connection connection = qcf.createConnection();
 Session ssession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
 MessageProducer queueSender = ssession.createProducer(q);
 
 TextMessage outMessage = ssession.createTextMessage();
 outMessage.setText(messageText);
 outMessage.setJMSType("JMSC.MQJMS_CLIENT_NONJMS_MQ");
 outMessage.setJMSDestination(q);
 
 System.out.println("The properties:\n");
 for (Enumeration e = outMessage.getPropertyNames() ; e.hasMoreElements() ;)
 {
 System.out.println(e.nextElement());
 }
 
 
 queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
 queueSender.send(outMessage);
 
 connection.close();
 
 System.out.println("The message\n" + outMessage);
 System.out.println("Send completed");
 
 
 }
 catch(Exception e)
 {
 e.printStackTrace();
 }
 
 Do you see anything stupid?
 
 Best regards
 Fredrik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mvic | 
			  
				|  Posted: Tue Feb 21, 2006 6:00 am    Post subject: Re: This is our code... |   |  | 
		
		  |  Jedi
 
 
 Joined: 09 Mar 2004Posts: 2080
 
 
 | 
			  
				| OK one note first: 
 
   
	| Code: |  
	| MessageConsumer queueReceiver = ssession.createConsumer(q) |  javax.jms.QueueReceiver and javax.jms.MessageConsumer are separate classes, with different purposes.  Just wanted to point that out in case it helps.
 
 Now, the problem.  I can't see from the code snippet exactly what type of message is being received.  What is the line in SystemOut before:
 
 
   
	| Code: |  
	| [2006-02-21 13:55:33:958 CET] 00000037 SystemOut O The message |  |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | fredand44 | 
			  
				|  Posted: Tue Feb 21, 2006 6:09 am    Post subject: |   |  | 
		
		  | Acolyte
 
 
 Joined: 14 Feb 2006Posts: 63
 
 
 | 
			  
				| Hello! 
 Thanks for your reply, the output for a receive is:
 
 [2006-02-21 15:08:18:508 CET] 00000050 ConnectionFac W   J2CA0294W: Deprecated usage of direct JNDI lookup of resource jms/WSFactory.  The following default values are used: [Resource-ref settings]
 
 res-auth:                 1 (APPLICATION)
 res-isolation-level:      0 (TRANSACTION_NONE)
 res-sharing-scope:        true (SHAREABLE)
 loginConfigurationName:   null
 loginConfigProperties:    null
 [Other attributes]
 
 res-resolution-control:   999 (undefined)
 isCMP1_x:                 false (not CMP1.x)
 isJMS:                 false (not JMS)
 
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O Class name: com.ibm.ws.sib.api.jms.impl.JmsTextMessageImpl
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O TextMessage
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O The message:
 
 JMSMessage class: jms_text
 JMSType:          JMSC.MQJMS_CLIENT_NONJMS_MQ
 JMSDeliveryMode:  1
 JMSExpiration:    0
 JMSPriority:      4
 JMSMessageID:     ID:dd0bcbeb704067c21b6c6d4f110a134f0000000000000001
 JMSTimestamp:     1140530897017
 JMSCorrelationID: null
 JMSDestination:   queue://QTOD?busName=WSBus&readAhead=AlwaysOn
 JMSReplyTo:       null
 JMSRedelivered:   false
 JMS_IBM_Encoding: 273
 JMS_IBM_System_MessageID: BC73EA21F0444ABE_10000033
 JMS_IBM_MsgType: 0
 JMSXUserID:
 JMS_IBM_PutTime: 14081717
 JMS_IBM_PutApplType: 31
 JMS_IBM_Format: MQSTR
 JMS_IBM_PutDate: 20060221
 JMSXAppID: Service Integration Bus
 JMS_IBM_Character_Set: 1208
 
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O The text:
 
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O Recv completed
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut     O Exception For input string: ""
 
 We will take a look at the classes you mentioned:
 javax.jms.QueueReceiver and javax.jms.MessageConsumer
 
 Best regards
 Fredrik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mvic | 
			  
				|  Posted: Tue Feb 21, 2006 6:31 am    Post subject: |   |  | 
		
		  |  Jedi
 
 
 Joined: 09 Mar 2004Posts: 2080
 
 
 | 
			  
				| The text of the text message appears to be empty.  This is (part of) the code 
 
   
	| Code: |  
	| System.out.println("The text:\n" + messageText); ...
 System.out.println("Recv completed");
 |  This is the output from that code
 
 
   
	| Code: |  
	| [2006-02-21 15:08:18:633 CET] 00000050 SystemOut O The text: 
 [2006-02-21 15:08:18:633 CET] 00000050 SystemOut O Recv completed
 |  This appears to be a successful receive of a text message with no text.  Did I misunderstand the problem?
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | BenR | 
			  
				|  Posted: Tue Feb 21, 2006 6:45 am    Post subject: |   |  | 
		
		  | Acolyte
 
 
 Joined: 31 Jan 2006Posts: 60
 Location: Hursley, UK
 
 | 
			  
				| 
   
	| Quote: |  
	| outMessage.setJMSType("JMSC.MQJMS_CLIENT_NONJMS_MQ"); 
 |  
 It's worth noting that JMSType won't do anything with this
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | fredand44 | 
			  
				|  Posted: Tue Feb 21, 2006 6:47 am    Post subject: We guess you understod correct... |   |  | 
		
		  | Acolyte
 
 
 Joined: 14 Feb 2006Posts: 63
 
 
 | 
			  
				| Hello! Actually that is what we think as well. The strange thing is where does the text go???
 
 We send a message with a text, but when we receive it the text is gone?
 
 Strange?
 
 /Fredrik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mvic | 
			  
				|  Posted: Tue Feb 21, 2006 6:52 am    Post subject: Re: We guess you understod correct... |   |  | 
		
		  |  Jedi
 
 
 Joined: 09 Mar 2004Posts: 2080
 
 
 | 
			  
				| 
   
	| fredand44 wrote: |  
	| We send a message with a text, but when we receive it the text is gone? |  Sounds like a reason to call Support.  But, this is a very simple situation you are describing, and I would expect it to have been tested.  So, if you decide to call and ask for defect support, perhaps first ensure you can recreate this with latest CSD on MQ and latest fixpack etc. on WAS?
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | vennela | 
			  
				|  Posted: Tue Feb 21, 2006 9:31 am    Post subject: |   |  | 
		
		  |  Jedi Knight
 
 
 Joined: 11 Aug 2002Posts: 4055
 Location: Hyderabad, India
 
 | 
			  
				| What is the message format. MQMD's format should be MQSTR if you can use the TextMessage kind of things.
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | eosterm | 
			  
				|  Posted: Tue Feb 21, 2006 12:28 pm    Post subject: |   |  | 
		
		  | Novice
 
 
 Joined: 09 Feb 2006Posts: 24
 
 
 | 
			  
				| What MQ type (not JMS type) should it be if you want a BytesMessage? 
 Thanks,
 
 --Erik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | PeterPotkay | 
			  
				|  Posted: Tue Feb 21, 2006 12:52 pm    Post subject: |   |  | 
		
		  |  Poobah
 
 
 Joined: 15 May 2001Posts: 7723
 
 
 | 
			  
				| 
   
	| eosterm wrote: |  
	| What MQ type (not JMS type) should it be if you want a BytesMessage? |  Leave it blank.
 _________________
 Peter Potkay
 Keep Calm and MQ On
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | mvic | 
			  
				|  Posted: Tue Feb 21, 2006 12:53 pm    Post subject: |   |  | 
		
		  |  Jedi
 
 
 Joined: 09 Mar 2004Posts: 2080
 
 
 | 
			  
				| 
   
	| eosterm wrote: |  
	| What MQ type (not JMS type) should it be if you want a BytesMessage? |  The short answer is MQFMT_NONE.  But are you sure this is the information you really need?
 
 It should be necessary to concern yourself with MQMD.Format only if your JMS client app is consuming messages produced by a native MQI (ie. non-JMS) app.
 
 If you do need to mix JMS and non-JMS apps, documentation for the message formats can be found at http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/topic/com.ibm.mq.csqzaw.doc/csqzaw1381.htm
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | eosterm | 
			  
				|  Posted: Tue Feb 21, 2006 1:00 pm    Post subject: |   |  | 
		
		  | Novice
 
 
 Joined: 09 Feb 2006Posts: 24
 
 
 | 
			  
				| Thanks, that is very helpful.  Yep, we're stuck with this until someone comes out with JMS for COBOL. <grin> 
 We have a long-standing java class library of value objects.  The getters locate EBCDIC data in fixed-position byte arrays and return standard java unicode.
 
 --Erik
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  | fjb_saper | 
			  
				|  Posted: Tue Feb 21, 2006 5:35 pm    Post subject: |   |  | 
		
		  |  Grand High Poobah
 
 
 Joined: 18 Nov 2003Posts: 20767
 Location: LI,NY
 
 | 
			  
				| 
   
	| BenR wrote: |  
	| 
   
	| Quote: |  
	| outMessage.setJMSType("JMSC.MQJMS_CLIENT_NONJMS_MQ"); 
 |  
 It's worth noting that JMSType won't do anything with this
 |  
 Leave the JMSType alone. Don't touch it.
 
 If you want to send to a non JMS client you should set that on the queue:
 
 
   
	| Code: |  
	| Session.createQueue("queue://MYQMGR/MYQUEUE?targetClient=1"); |  You may leave the target qmgr blank so that it looks for the queue on the qmgr you are connected to: queue:///myqueue
 
 Enjoy
  _________________
 MQ & Broker admin
 |  | 
		
		  | Back to top |  | 
		
		  |  | 
		
		  |  |