Java/J2EE/JMS SOAP
Содержание
- 1 A JMS message listener can use the MessageTransformer utility to convert JMS messages back to SOAP messages
- 2 How to use the MessageTransformer utility to convert SOAP message to JMS message
- 3 How to use the MessageTransformer utility to send SOAP messages with JMS
- 4 This example demonstrates a hello world example for using JAXM API
- 5 This example echos the SOAP message received back to the sender
A JMS message listener can use the MessageTransformer utility to convert JMS messages back to SOAP messages
<source lang="java">
/*
* @(#)ReceiveSOAPMessageWithJMS.java 1.4 02/05/02 * * Copyright (c) 2002 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.soap.AttachmentPart; import com.sun.messaging.xml.MessageTransformer; import com.sun.messaging.ConnectionFactory; import javax.jms.MessageListener; import javax.jms.Connection; import javax.jms.Session; import javax.jms.Message; import javax.jms.Session; import javax.jms.Topic; import javax.jms.JMSException; import javax.jms.MessageConsumer; import java.util.Iterator; /**
* This example shows a JMS message listener can use the MessageTransformer * utility to convert JMS messages back to SOAP messages. */
public class ReceiveSOAPMessageWithJMS implements MessageListener {
ConnectionFactory connectionFactory = null; Connection connection = null; Session session = null; Topic topic = null; MessageConsumer msgConsumer = null; MessageFactory messageFactory = null; /** * Default constructor. */ public ReceiveSOAPMessageWithJMS(String topicName) { init(topicName); } /** * JMS Connection/Session/Destination/MessageListener set ups. */ public void init(String topicName) { try { /** * construct a default SOAP message factory. */ messageFactory = MessageFactory.newInstance(); /** * JMS set up. */ connectionFactory = new com.sun.messaging.ConnectionFactory(); connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); topic = session.createTopic(topicName); msgConsumer = session.createConsumer(topic); msgConsumer.setMessageListener( this ); connection.start(); System.out.println ("ready to receive SOAP messages ..."); } catch (Exception jmse) { jmse.printStackTrace(); } } /** * JMS Messages are delivered to this method. The body of the message * contains SOAP streams. * * 1. The message conversion utility converts JMS message to SOAP * message type. * 2. Get the attachment parts and print content information to the * standard output stream. */ public void onMessage (Message message) { try { /** * convert JMS to SOAP message. */ SOAPMessage soapMessage = MessageTransformer.SOAPMessageFromJMSMessage( message, messageFactory ); /** * Print attachment counts. */ System.out.println("message received! Attachment counts: " + soapMessage.countAttachments()); /** * Get attachment parts of the SOAP message. */ Iterator iterator = soapMessage.getAttachments(); while ( iterator.hasNext() ) { /** * Get next attachment. */ AttachmentPart ap = (AttachmentPart) iterator.next(); /** * Get content type. */ String contentType = ap.getContentType(); System.out.println("content type: " + contentType); /** * Get content Id. */ String contentId = ap.getContentId(); System.out.println("content Id: " + contentId); /** * Check if this is a Text attachment. */ if ( contentType.indexOf("text") >=0 ) { /** * Get and print the string content if it is a text * attachment. */ String content = (String) ap.getContent(); System.out.println("*** attachment content: " + content); } } } catch (Exception e) { e.printStackTrace(); } } /** * The main method to start the example receiver. */ public static void main (String[] args) { String topicName = "TestTopic"; if (args.length > 0) { topicName = args[0]; } try { ReceiveSOAPMessageWithJMS rsm = new ReceiveSOAPMessageWithJMS(topicName); } catch (Exception e) { e.printStackTrace(); } }
}
</source>
How to use the MessageTransformer utility to convert SOAP message to JMS message
<source lang="java">
/*
* @(#)SOAPtoJMSServlet.java 1.5 02/07/19 * * Copyright (c) 2002 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import javax.xml.messaging.JAXMServlet; import javax.xml.messaging.ReqRespListener; import javax.xml.soap.SOAPMessage; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPPart; import com.sun.messaging.xml.MessageTransformer; import com.sun.messaging.TopicConnectionFactory; import javax.jms.MessageListener; import javax.jms.TopicConnection; import javax.jms.TopicSession; import javax.jms.Session; import javax.jms.Message; import javax.jms.Topic; import javax.jms.JMSException; import javax.jms.TopicPublisher; import javax.servlet.ServletConfig; import javax.servlet.ServletException; /**
* This example shows how to use the MessageTransformer utility to convert SOAP * message to JMS message. When SOAP messages are received, they are * delivered to the ReqRespListener"s onMessage() method. The onMessage() * implementation uses the utility to convert SOAP to JMS message, then * publishes the message to the JMS Topic.*
* The onMessage() method adds <MessageStatus> element with value "published" * to the SOAPBody and returns the SOAP message to the caller. */ public class SOAPtoJMSServlet extends JAXMServlet implements ReqRespListener { TopicConnectionFactory tcf = null; TopicConnection tc = null; TopicSession session = null; Topic topic = null; TopicPublisher publisher = null; /** * The init method set up JMS Connection/Session/Publisher. */ public void init(ServletConfig config) throws ServletException { super.init(config); try { tcf = new com.sun.messaging.TopicConnectionFactory(); tc = tcf.createTopicConnection(); session = tc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); String topicName = config.getInitParameter("TopicName"); if ( topicName == null ) { topicName = "TestTopic"; } topic = session.createTopic(topicName); publisher = session.createPublisher(topic); } catch (Exception jmse) { throw new ServletException (jmse); } } /** * Clean up JMS connection. */ public void destroy() { try { if ( tc != null ) { tc.close(); } } catch (Exception e) { e.printStackTrace(); } } /** * SOAP Messages are delivered to this method and then published to the * JMS topic destination. */ public SOAPMessage onMessage (SOAPMessage soapMessage) { try { Message message = MessageTransformer.SOAPMessageIntoJMSMessage(soapMessage, session); publisher.publish( message ); } catch (Exception e) { e.printStackTrace(); } SOAPMessage resp = generateResponseMessage(soapMessage); return resp; } /** * Add a MessageStatus element with the value of "published" to * the soapMessage. */ public SOAPMessage generateResponseMessage(SOAPMessage soapMessage) { try { SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); SOAPBody soapBody = envelope.getBody(); soapBody.addChildElement("MessageStatus").addTextNode("published"); soapMessage.saveChanges(); } catch (SOAPException soape) { soape.printStackTrace(); } return soapMessage; } } </source>
How to use the MessageTransformer utility to send SOAP messages with JMS
<source lang="java">
/*
* @(#)SendSOAPMessageWithJMS.java 1.6 02/05/02 * * Copyright (c) 2002 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import javax.xml.soap.SOAPMessage; import javax.xml.soap.SOAPPart; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPElement; import javax.xml.soap.MessageFactory; import javax.xml.soap.AttachmentPart; import javax.xml.soap.Name; import java.net.URL; import javax.activation.DataHandler; import com.sun.messaging.xml.MessageTransformer; import javax.jms.ConnectionFactory; import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Session; import javax.jms.Message; import javax.jms.Session; import javax.jms.Topic; import javax.jms.MessageProducer; /**
* This example shows how to use the MessageTransformer utility to send SOAP * messages with JMS. * <p> * SOAP messages are constructed with javax.xml.soap API. The messages * are converted with MessageTransformer utility to convert SOAP to JMS * message types. The JMS messages are then published to the JMS topics. */
public class SendSOAPMessageWithJMS {
ConnectionFactory connectionFactory = null; Connection connection = null; Session session = null; Topic topic = null; MessageProducer msgProducer = null; /** * default constructor. */ public SendSOAPMessageWithJMS(String topicName) { init(topicName); } /** * Initialize JMS Connection/Session/Topic and Producer. */ public void init(String topicName) { try { connectionFactory = new com.sun.messaging.ConnectionFactory(); connection = connectionFactory.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); topic = session.createTopic(topicName); msgProducer = session.createProducer(topic); } catch (JMSException jmse) { jmse.printStackTrace(); } } /** * Send SOAP message with JMS API. */ public void send () throws Exception { /** * Construct a default SOAP message factory. */ 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.ru/imq. */ Name name = soapEnvelope.createName("HelloWorld", "hw", "http://www.sun.ru/imq"); /** * Add child element with the above name. */ SOAPElement element = soapBody.addChildElement(name); /** * Add another child element. */ element.addTextNode( "Welcome to SunOne Web Services." ); /** * Create an atachment with activation API. */ URL url = new URL ("http://java.sun.ru/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 SOAP to JMS message. */ Message message = MessageTransformer.SOAPMessageIntoJMSMessage( soapMessage, session ); /** * publish JMS message. */ msgProducer.send( message ); } /** * close JMS connection. */ public void close() throws JMSException { connection.close(); } /** * The main program to send SOAP messages with JMS. */ public static void main (String[] args) { String topicName = "TestTopic"; if (args.length > 0) { topicName = args[0]; } try { SendSOAPMessageWithJMS ssm = new SendSOAPMessageWithJMS(topicName); ssm.send(); ssm.close(); } catch (Exception e) { e.printStackTrace(); } }
}
</source>
This example demonstrates a hello world example for using JAXM API
<source lang="java">
/*
* @(#)SendSOAPMessage.java 1.4 02/05/02 * * Copyright (c) 2002 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import javax.xml.messaging.URLEndpoint; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import javax.xml.soap.SOAPEnvelope; import javax.xml.soap.SOAPBody; import javax.xml.soap.SOAPPart; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPConnectionFactory; import javax.xml.soap.SOAPConnection; /**
* This example demonstrates a hello world example for using JAXM API. */
public class SendSOAPMessage {
/** * send a simple soap message with JAXM API. */ public void sendMessage (String url) { try { /** * Construct a default SOAP message factory. */ 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(); /** * Add child element with the specified name. */ SOAPElement element = soapBody.addChildElement("HelloWorld"); /** * Add text message */ element.addTextNode("Welcome to SunOne Web Services!"); soapMessage.saveChanges(); /** * Construct a default SOAP connection factory. */ SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance(); /** * Get SOAP connection. */ SOAPConnection soapConnection = connectionFactory.createConnection(); /** * Construct endpoint object. */ URLEndpoint endpoint = new URLEndpoint (url); /** * Send SOAP message. */ SOAPMessage resp = soapConnection.call(soapMessage, endpoint); /** * Print response to the std output. */ resp.writeTo( System.out ); /** * close the connection */ soapConnection.close(); } catch (java.io.IOException ioe) { ioe.printStackTrace(); } catch (SOAPException soape) { soape.printStackTrace(); } } public static void main (String args[]) { String url = "http://localhost:8080/imqSOAPexamples/SOAPEchoServlet"; if (args.length > 0) { url = args[0]; } else { System.out.println("Usage: " + "\tjava SendSOAPMessage <SOAP servlet url>\n" + "e.g.\n\tjava SendSOAPMessage http://localhost:8080/imqSOAPexamples/SOAPEchoServlet" ); System.exit(1); } SendSOAPMessage ssm = new SendSOAPMessage(); ssm.sendMessage(url); }
}
</source>
This example echos the SOAP message received back to the sender
<source lang="java">
/*
* @(#)SOAPEchoServlet.java 1.4 02/05/02 * * Copyright (c) 2002 Sun Microsystems, Inc. All Rights Reserved. * * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use, * modify and redistribute this software in source and binary code form, * provided that i) this copyright notice and license appear on all copies of * the software; and ii) Licensee does not utilize the software in a manner * which is disparaging to Sun. * * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * This software is not designed or intended for use in on-line control of * aircraft, air traffic, aircraft navigation or aircraft communications; or in * the design, construction, operation or maintenance of any nuclear * facility. Licensee represents and warrants that it will not use or * redistribute the Software for such purposes. */
import javax.xml.messaging.JAXMServlet; import javax.xml.messaging.ReqRespListener; import javax.xml.soap.SOAPMessage; /**
* This example echos the SOAP message received back to the sender. */
public class SOAPEchoServlet extends JAXMServlet implements ReqRespListener {
/** * SOAP Message received is echoed back to the sender. */ public SOAPMessage onMessage (SOAPMessage soapMessage) { return soapMessage; }
}
</source>