package samples.print;
import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
import javax.net.ssl.SSLSocketFactory;

import java.security.Security;



public class PrintClient
{


    public  BeanSerializer beanSer;
    public String encodingStyleURI=Constants.NS_URI_SOAP_ENC;
    public PrintObject  rpo;


	public PrintObject callMethod(String str)
	{
		Call call = new Call();
		Response resp = null;
		URL  url = null;
	    beanSer= new BeanSerializer();
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

		System.setProperty("javax.net.ssl.keyStore","d:\\certs\\server.keystore");
		System.setProperty("javax.net.ssl.keyStoreType","KeyStore.getDefaultType()");
		System.setProperty("javax.net.ssl.keyStorePassword","changeit");
	    System.setProperty("javax.net.ssl.trustStore","d\\certs\\client.keystore");

		System.setProperty("javax.net.ssl.trustStoreType","KeyStore.getDefaultType()");
		System.setProperty("javax.net.ssl.trustStorePassword","changeit");
	    System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");



	   try
	   {
		   url = new URL("https://vali:8443/soap/servlet/rpcrouter");
		   System.out.println("This is HTTps connection");
		   // specify the location of where to find key material for the default TrustManager (this overrides jssecacerts and cacerts)


		   // use Sun's reference implementation of a URL handler for the "https" URL protocol type.

		   System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");

		   // dynamically register sun's ssl provider

		   SOAPMappingRegistry smr = new SOAPMappingRegistry();
		   call.setEncodingStyleURI(encodingStyleURI);

	       smr.mapTypes(Constants.NS_URI_SOAP_ENC,new QName("urn:print","print"),PrintObject.class,beanSer,beanSer);
		   call.setSOAPMappingRegistry(smr);
		   call.setTargetObjectURI("urn:PrintService");
	   }
	   catch(Exception e)
	   {
		   e.printStackTrace();

	   }

	   PrintObject  po = new PrintObject();
	   PrintObject returnObj = null;
	   po.setString(str);
	   try
	   {
		   //System.out.println("***********before vector");
		    call.setMethodName("getString");
		    Vector params = new Vector();
	   		params.addElement(new Parameter("returnObj",PrintObject.class,po,null));
	   		call.setParams(params);
	   		System.out.println("call obj\n"+call);
	   		resp = call.invoke(url,"");
			System.out.println("*******after invoking call");
		}
		catch (SOAPException e)
		{
			//System.err.println("Caught SOAPException (" +e.getFaultCode() + "): " +e.getMessage());
			e.printStackTrace();
		}

		if (!resp.generatedFault())
		{
			Parameter ret = resp.getReturnValue();
			returnObj =(PrintObject)ret.getValue();

		}
		else
		{
			Fault fault = resp.getFault();
			System.err.println("Generated fault: ");
			System.out.println ("  Fault Code   = " + fault.getFaultCode());
			System.out.println ("  Fault String = " + fault.getFaultString());
		}
		System.out.println("retrurObj"+returnObj);
	    return returnObj;

	}
	public static void main(String args[])
    {
		PrintClient myClient = new PrintClient();
		System.out.println("object is ------->"+myClient.callMethod("hai").toString());


	}

}