package soapExample;

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.xml.soap.*;
import javax.activation.*;
import javax.servlet.http.*;

public class ch18_01 extends HttpServlet 
{
    private SOAPConnection connection;
    
    public void init(ServletConfig servletConfig) throws ServletException 
    {
        super.init(servletConfig);
        
        try {
	    SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
            connection = factory.createConnection();
        } catch(Exception e) {}
    }
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException 
    {
        String outString ="<HTML><H1>Sent and Received SOAP Message</H1><P>";
        
        try {
            MessageFactory messageFactory = MessageFactory.newInstance();
            SOAPMessage message = messageFactory.createMessage();
            SOAPPart soappart = message.getSOAPPart();
            SOAPEnvelope envelope = soappart.getEnvelope();
            SOAPHeader header = envelope.getHeader();
            SOAPBody body = envelope.getBody();
            
            body.addBodyElement(envelope.createName("NumberInStock", "pens",
            "http://www.starpowder.com")).addTextNode("125");
            
            StringBuffer urlServer = new StringBuffer();
            urlServer.append(request.getScheme()).append("://").append(request.getServerName());
            urlServer.append(":").append(request.getServerPort()).append(request.getContextPath());
            String requestBase = urlServer.toString();
            URL url = new URL(requestBase + "/ch18_03.html");

            AttachmentPart attachmentpart = message.createAttachmentPart(new DataHandler(url));
            attachmentpart.setContentType("text/html");
            message.addAttachmentPart(attachmentpart);
            
            URL getter = new URL(requestBase + "/ch18_02");
            
            FileOutputStream sentFile = new FileOutputStream("put.msg");
            message.writeTo(sentFile);
            sentFile.close();
            
            outString += "Sent SOAP message stored in put.msg. <p>";
            
            SOAPMessage receivedMessage = connection.call(message, getter);
            
            if (receivedMessage != null) {
                FileOutputStream receivedFile = new FileOutputStream("get.msg");
                receivedMessage.writeTo(receivedFile);
                receivedFile.close();
                outString += "Received SOAP message stored in get.msg.</HTML>";
            } 
            
        } catch(Throwable e) {}
        
        try {
            OutputStream outputStream = response.getOutputStream();
            outputStream.write(outString.getBytes());
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {}
    }
    
}
