Import the MessageTransformer library.
import com.sun.messaging.xml.MessageTransformer;
This is the utility whose methods you use to convert SOAP messages to JMS messages and the reverse. You can then send a JMS message containing a SOAP payload as if it were a normal JMS message.
Initialize the TopicConnectionFactory, TopicConnection, TopicSession, and publisher.
tcf = new TopicConnectionFactory(); tc = tcf.createTopicConnection(); session = tc.createTopicSession(false,Session.AUTO_ACKNOWLEDGE); topic = session.createTopic(topicName); publisher = session.createPublisher(topic);
Construct a SOAP message using the SOAP with Attachments API for Java (SAAJ).
*construct a default soap MessageFactory */ MessageFactory mf = MessageFactory.newInstance(); /* Create a SOAP message object.*/ SOAPMessage soapMessage = mf.createMessage(); /** Get SOAP part.*/ SOAPPart soapPart = soapMessage.getSOAPPart(); /* Get SOAP envelope. */ SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); /* Get SOAP body.*/ SOAPBody soapBody = soapEnvelope.getBody(); /* Create a name object. with name space */ /* http://www.sun.com/imq. */ Name name = soapEnvelope.createName("HelloWorld", "hw", "http://www.sun.com/imq"); * Add child element with the above name. */ SOAPElement element = soapBody.addChildElement(name) /* Add another child element.*/ element.addTextNode( "Welcome to Sun Java System Web Services." ); /* Create an atachment with activation API.*/ URL url = new URL ("http://java.sun.com/webservices/"); DataHandler dh = new DataHandler (url); AttachmentPart ap = soapMessage.createAttachmentPart(dh); /*set content type/ID. */ ap.setContentType("text/html"); ap.setContentId("cid-001"); /** add the attachment to the SOAP message.*/ soapMessage.addAttachmentPart(ap); soapMessage.saveChanges();
Convert the SOAP message to a JMS message by calling the MessageTransformer.SOAPMessageintoJMSMessage() method.
Message m = MessageTransformer.SOAPMessageIntoJMSMessage (soapMessage, session );
Publish the JMS message.
publisher.publish(m);
Close the JMS connection.
tc.close();