Avatar of myjobiscoding
myjobiscoding
 asked on

JMS Send -Send a soap message instead of String ?

Hi,

I am googling to find how to send a message over JMS Queue. I get it work. But I need to send a soap message instead of String
===
below is my codes:

package com.osm.jms.queue;
import java.io.FileInputStream;
import java.util.Hashtable;
import javax.naming.*;
import javax.jms.JMSException;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueConnection;
import javax.jms.QueueSession;
import javax.jms.Queue;
import javax.jms.TextMessage;
import javax.jms.QueueSender;


import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.transform.stream.StreamSource;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;


import javax.jms.Message;

/* need two jar files
 * wlclient.jar - provide Java EE functionality for Thin Client
 * wljmsclient.jar - provide Java EE and WebLogic JMS functionality
 */

public class JMSSender {
         private static InitialContext ctx = null;
         private static QueueConnectionFactory queueConnectionFactory = null;
         private static QueueConnection qc = null;
         private static QueueSession qsess = null;
         private static Queue q = null;
         private static QueueSender qsndr = null;
         private static TextMessage message = null;
         // NOTE: The next two lines set the name of the Queue Connection Factory
         //       and the Queue that we want to use.
         private static final String QCF_NAME = "javax.jms.QueueConnectionFactory";
         private static final String SOP_QUEUE_NAME = "au.com.telstra.ngbcom.sop.oss";
         public JMSSender() {
             super();
         }
         public static void sendMessage(String messageText) {
             // create InitialContext
             Hashtable<String, String> properties = new Hashtable();
             properties.put(Context.INITIAL_CONTEXT_FACTORY,  "weblogic.jndi.WLInitialContextFactory");
             // NOTE: The port number of the server is provided in the next line,
             //       followed by the userid and password on the next two lines.
             properties.put(Context.PROVIDER_URL, "t3://olbgen.in.telstra.com.au:7002");
             properties.put(Context.SECURITY_PRINCIPAL, "admin");
             properties.put(Context.SECURITY_CREDENTIALS, "dskdsk123");
             try {
                 ctx = new InitialContext(properties);
             } catch (NamingException ne) {
                 ne.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got InitialContext " + ctx.toString());
             // create QueueConnectionFactory
             try {
                 queueConnectionFactory = (QueueConnectionFactory)ctx.lookup(QCF_NAME);
             }
             catch (NamingException ne) {
                 ne.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got QueueConnectionFactory " + queueConnectionFactory.toString());
             // create QueueConnection
             try {
                 qc = queueConnectionFactory.createQueueConnection();
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got QueueConnection " + qc.toString());
             // create QueueSession
             try {
                 qsess = qc.createQueueSession(false, 0);
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got QueueSession " + qsess.toString());
             // lookup Queue
             try {
                 q = (Queue) ctx.lookup(SOP_QUEUE_NAME);
             }
             catch (NamingException ne) {
                 ne.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got Queue " + q.toString());
             // create QueueSender
             try {
                 qsndr = qsess.createSender(q);
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got QueueSender " + qsndr.toString());
            
             // create TextMessage
             try {
                // message = (SOAPMessage) qsess.createTextMessage();
                
                 message = qsess.createTextMessage();
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Got TextMessage " + message.toString());
             // set message text in TextMessage
             try {
                 ((TextMessage) message).setText(messageText);
                
                 // message.setText(messageText);
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Set text in TextMessage " + message.toString());
             // send message
             try {
                //  qsndr.send(message);
              //   qsndr.send(message);
                qsndr.send((Message) message);
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }
             System.out.println("Sent message ");
             // clean up
             try {
                 message = null;
                 qsndr.close();
                 qsndr = null;
                 q = null;
                 qsess.close();
                 qsess = null;
                 qc.close();
                 qc = null;
                 queueConnectionFactory = null;
                 ctx = null;
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
             }
             System.out.println("Cleaned up and done.");
         }
         public static void main(String args[]) {
               String sopMessage = "text";
             sendMessage("test");
         }


}
=================================================
It work find, I need to change from


             // set message text in TextMessage
             try {
                 ((TextMessage) message).setText(messageText);
                
                 // message.setText(messageText);
             }

to ==>

             // Create SOAP Message
              /** Create SOAPMessage request. **/
              // compose a request message
              MessageFactory messageFactory = MessageFactory.newInstance();
              SOAPMessage message = messageFactory.createMessage();

              //Create objects for the message parts
              SOAPPart soapPart = message.getSOAPPart();
              SOAPEnvelope envelope = soapPart.getEnvelope();
              SOAPBody body = envelope.getBody();

              //Populate the Message.  In here, I populate the message from a xml file
              StreamSource preppedMsgSrc = new StreamSource(new FileInputStream("SaleOrder.xml"));
              soapPart.setContent(preppedMsgSrc);

             // create TextMessage
             try {
                // message = (SOAPMessage) qsess.createTextMessage();
                
                 message = qsess.createTextMessage();
             }
             catch (JMSException jmse) {
                 jmse.printStackTrace(System.err);
                 System.exit(0);
             }


the above not working at all. please help...
JavaProgramming Languages-Other

Avatar of undefined
Last Comment
myjobiscoding

8/22/2022 - Mon
girionis

Just do:

try {
                 ((TextMessage) message).setText(  ((SOAPMessage) qsess.createTextMessage()).toString() );
                
                 // message.setText(messageText);
             }

Open in new window

myjobiscoding

ASKER
Sorry, girionis

I didn't see how to convert the messageText to SOAP message

The messageText contains SOAP messsage format.

your suggestion is

 ((TextMessage) message).setText(  ((SOAPMessage) qsess.createTextMessage()).toString() );

where do I add the messageText to message

please advise
girionis

My suggestion is how to convert a SOAP message to text, not the other way round. If you want to create a SOAP message from a string you will have to use any other method to do it.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
myjobiscoding

ASKER
hi girionis.

I have already got a soap message. that is exactly what i want.. convert a SOAP message to text.

--
 ((TextMessage) message).setText(((SOAPMessage) qsess.createTextMessage()).toString());

I got the following errors

weblogic.jms.common.TextMessageImpl cannot be cast to javax.xml.soap.SOAPMessage
ASKER CERTIFIED SOLUTION
mccarl

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
myjobiscoding

ASKER
many thanks. i understand now..
myjobiscoding

ASKER
Hi mccarl, are you able to help me in java.. i will pay you for your help. sometimes i dont find people here answering my questions straight away.. this is my first job.. i need some help
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.