1 SAAJ SOAPメッセージの送信

SAAJ (SOAP with Attachments API for Java)は新しいJava APIで、Java言語からSOAPメッセージを扱う標準の方法を記述します。 特に、SAAJは、SOAP仕様に準拠するデータを送信できるSOAPメッセージを定義します。

Novell exteNd Messaging PlatformのJMSでは、特別なJMQSOAPMessageがサポートされており、ペイロードとしてSAAJ SOAPMessageメッセージを送信できます。 このため、SAAJメッセージを簡単に送信できます。

この例では、GIFイメージを持つSOAPメッセージを添付ファイルとして送信する方法を示します。 クライアントがJMQSOAPMessageを受信すると、含まれていたSAAJ SOAPMessageが取り出され、小さいアプレットで添付ファイルが表示されます。

Clientクラスのソースコードは、次のとおりです。

package saaj;
                                                                           
import java.net.URL;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Graphics;
import java.awt.Dimension;
import java.util.Iterator;
import java.io.InputStream;
                                                                           
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.QueueReceiver;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
                                                                           
import javax.swing.JFrame;
import javax.swing.JApplet;
                                                                           
import javax.naming.InitialContext;
                                                                           
import javax.activation.DataHandler;
                                                                           
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.AttachmentPart;
                                                                           
import com.sssw.jms.api.JMQSession;
import com.sssw.jms.api.JMQSOAPMessage;
                                                                           
/**
   This client sends a SAAJ SOAP message using the jBroker MQ
   JMQSOAPMessage wrapper.On receipt the GIF attachment part of the
   message is displayed.
 */
                                                                           
public class Client extends JApplet
{
    public static void main(String[] args) throws Exception
    {
    |   // bootstrap queue connection factory and queue
    |   InitialContext ctx = new InitialContext();
    |   QueueConnectionFactory factory =
    |       (QueueConnectionFactory) ctx.lookup("queue/connectionFactory");
    |   Queue queue = (Queue) ctx.lookup("queue/queue0");
    |                                                                      
    |   // create and start a connection
    |   QueueConnection conn = factory.createQueueConnection();
    |   conn.start();
    |                                                                      
    |   // create sender and receiver
    |   int mode = Session.AUTO_ACKNOWLEDGE;
    |   QueueSession session = conn.createQueueSession(false, mode);
    |   QueueSender sender = session.createSender(queue);
    |   QueueReceiver receiver = session.createReceiver(queue);
    |                                                                      
    |   // create a SOAP message wrapper
    |   JMQSession jses = (JMQSession) session;
    |   JMQSOAPMessage m1 = jses.createSOAPMessage();
    |                                                                      
    |   // create and send the SOAP message
    |   SOAPMessage s1 = getMessage();
    |   m1.setMessage(s1);
    |   sender.send(m1);
    |                                                                      
    |   // receive the SOAP message
    |   JMQSOAPMessage m2 = (JMQSOAPMessage) receiver.receive();
    |   SOAPMessage s2 = m2.getMessage();
    |   conn.close();
    |                                                                      
    |   // display attachment part
    |   Iterator iter = s1.getAttachments();
    |   AttachmentPart part = (AttachmentPart) iter.next();
    |   DataHandler handler = part.getDataHandler();
    |   InputStream is = handler.getInputStream();
    |   byte[] data = new byte[is.available()];
    |   is.read(data);
    |   Image logo = Toolkit.getDefaultToolkit().createImage(data);
    |   JApplet applet = new Client(logo);
    |   JFrame frame = new JFrame();
    |   frame.getContentPane().add(applet);
    |   frame.setSize(new Dimension(245,135));
    |   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    |   frame.setVisible(true);
    }
                                                                           
    private final Image _logo;
                                                                           
    public Client(Image logo)
    {
    |   _logo = logo;
    }
                                                                           
    public void paint(Graphics g)
    {
    |   g.drawImage(_logo, 0, 0, this);
    }
                                                                           
    private static SOAPMessage getMessage() throws Exception
    {
    |   // construct SOAP message to send
    |   MessageFactory factory = MessageFactory.newInstance();
    |   SOAPMessage message = factory.createMessage();
    |   SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
    |   envelope.addNamespaceDeclaration("ns", "http://www.example.com");
    |   SOAPBody body = envelope.getBody();
    |   Name name = envelope.createName("sayHello", "ns",
    |      "http://www.example.com");
    |   SOAPElement child = body.addChildElement(name);
    |                                                                      
    |   // add a gif
    |   URL url = new URL("file:jbrokerlogo.gif");
    |   DataHandler handler = new DataHandler(url);
    |   AttachmentPart part = message.createAttachmentPart(handler);
    |   message.addAttachmentPart(part);
    |                                                                      
    |   message.saveChanges();
    |                                                                      
    |   return message;
    }
}
この例を実行するには、Novell exteNd WebサービスSDKに含まれているようなSAAJプロバイダが必要です。 これは、Novell Webサイトからダウンロードできます。 wssdk.jarおよびactivation.jarファイルがクライアントアプリケーションおよびJMSサーバの両方のCLASSPATHにあることを確認します。

トップに戻る


Copyright © 2000-2003, Novell, Inc.All rights reserved.