package axisdoc;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import org.apache.axis.utils.XMLUtils;
import java.lang.*;
import org.apache.axis.message.SOAPBodyElement;

import org.apache.axis.utils.XMLUtils;
import org.w3c.dom.Element;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import java.net.URL;
import java.util.Vector;

import javax.xml.soap.Name;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;


import javax.xml.namespace.QName;


public class Client
	{
	    public static void main(String [] args) throws Exception
		    {
				try{

					// get the URL of the web service and make the connection

					String endpointURL="http://localhost:8080/axis/services/EnvelopeService";
			        String a = null;
					Service  service = new Service();
					Call     call    = (Call) service.createCall();
				    a = args[0];
					call.setTargetEndpointAddress( new URL(endpointURL) );


        			// We want to use SOAP envelope instead so we make the SOAPEnvelope

					SOAPEnvelope    requestEnvelope = new SOAPEnvelope();
					SOAPEnvelope    responseEnvelope = new SOAPEnvelope();
			        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        			Document doc = builder.newDocument();
			        Element root = doc.createElementNS("EnvelopeService","getDetail");
        			doc.appendChild(root);
			        Element ele = doc.createElement("e1");
        			Node text = doc.createTextNode(a);
        			ele.appendChild(text);
        			root.appendChild(ele);
        			XMLUtils.DocumentToStream(doc,System.out);
				 	SOAPBodyElement requestBody = new SOAPBodyElement(doc.getDocumentElement());
			        requestEnvelope.addBodyElement(requestBody);

					Name name= requestEnvelope.createName("SESSIONID");

					requestEnvelope.getHeader().detachNode();
					SOAPHeader sh= (SOAPHeader)requestEnvelope.addHeader();
					SOAPHeaderElement shElement = (SOAPHeaderElement)sh.addHeaderElement(name);
					shElement.addTextNode("4444444444");

					Document document1=requestEnvelope.getAsDocument();
					XMLUtils.DocumentToStream(document1,System.out);

					// call the web service

				    responseEnvelope = call.invoke(requestEnvelope);
			        //SOAPBodyElement responseBody = (SOAPBodyElement)responseEnvelope.getBodyElements().get(0);
					System.out.println();
					System.out.println();
					System.out.println("printing the response envelope after getting it from the web service");
					System.out.println();
					Document document = responseEnvelope.getAsDocument();
					XMLUtils.DocumentToStream(document,System.out);
					}
					catch(Exception ee)
						{
							ee.printStackTrace();
						}


	    }
}