FileDocCategorySizeDatePackage
EBXMLEchoServlet.javaAPI DocExample5074Sat Aug 31 16:00:42 BST 2002ora.jwsnut.chapter4.ebXMLecho

EBXMLEchoServlet

public class EBXMLEchoServlet extends javax.xml.messaging.JAXMServlet implements javax.xml.messaging.OnewayListener
A servlet that recieves an ebXML message and returns it to its sender.

Fields Summary
private ByteArrayOutputStream
os
Output stream used to save a SOAP message for logging.
private javax.xml.messaging.ProviderConnection
conn
ProviderConnection used to send reply messages
private MessageFactory
messageFactory
MessageFactory for ebXML messages
Constructors Summary
Methods Summary
public voidinit(javax.servlet.ServletConfig servletConfig)
Initialize by installing the appropriate MessageFactory

    
               
          
        super.init(servletConfig);

        // Workaround for hang when deploying in J2EE container.
        // Do not connect to the provider here - defer to another thread.
        new Thread(new Runnable() { 
            public void run() {
                try {
                    // Create the connection to the provider
                    conn = ProviderConnectionFactory.newInstance().createConnection();

                    // Work around for a JAXM bug
                    conn.getMetaData();

                    // Install the message factory for the ebXML profile
                    messageFactory = conn.createMessageFactory("ebxml");
                    setMessageFactory(messageFactory);
                } catch (Exception e) {
                    log("Exception when initializing", e);
                }
           }
        }).start();
    
public voidonMessage(javax.xml.soap.SOAPMessage message)
Handles a received SOAP message

        
        // Convert the message to string representation
        // and log it.
        try {
            message.writeTo(os);
            log("Received SOAP message:\n" + os.toString());
            os.reset();
            
            // Create a copy of the message with the same body
            // and with the to and from addresses exchanged.
            EbXMLMessageImpl soapMsg = (EbXMLMessageImpl)message;
            
            // Create a reply message
            EbXMLMessageImpl replyMsg = (EbXMLMessageImpl)messageFactory.createMessage();
            
            // Move the body content from the received message to the source.
            SOAPBody body = soapMsg.getSOAPPart().getEnvelope().getBody();
            SOAPBody replyBody = replyMsg.getSOAPPart().getEnvelope().getBody();
            Iterator iter = body.getChildElements();
            while (iter.hasNext()) {
                SOAPElement element = (SOAPElement)iter.next();
                replyBody.addChildElement(element);
            }
            
            // Add an element after the body that contains the date.
            SOAPElement element = 
                    replyMsg.getSOAPPart().getEnvelope().addChildElement("Date", "tns", "urn:ebXMLEcho");
            element.addTextNode(new Date().toString());
            
            // Copy any attachments
            iter = soapMsg.getAttachments();
            while (iter.hasNext()) {
                replyMsg.addAttachmentPart((AttachmentPart)iter.next());
            }
            
            // Get the message ID and install it as the "RefToMessageId" value
            replyMsg.setRefToMessageId(soapMsg.getMessageId());
            
            // Get the the "Reciever" address and install it as the "Sender" address
            replyMsg.setSender(soapMsg.getReceiver());
            
            // Get the "Sender" address an install it as the "Receiver" address
            replyMsg.setReceiver(soapMsg.getSender());
            
            // Copy values from the ebXML MessageHeader
            replyMsg.setAction(soapMsg.getAction());
            replyMsg.setConversationId(soapMsg.getConversationId());
            replyMsg.setCPAId(soapMsg.getCPAId());
            replyMsg.setManifest(soapMsg.getManifest());
            replyMsg.setMessageHeaderVersion(soapMsg.getMessageHeaderVersion());
            replyMsg.setService(soapMsg.getService());    
            
            // Send the reply message
            conn.send(replyMsg);
        } catch (Exception ex) {
            log("Exception", ex);
        }