import java.util.*;
import java.net.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;

public class CurrencyConvert
{
	public double convert(short inCurrency, short outCurrency, double amount) throws MalformedURLException
	{
	   URL url = new URL( "http://javaServices.EuroConverter/soap/servlet/rpcrouter" );

      // build the call.
      Call myCall = new Call();
      myCall.setTargetObjectURI("urn:ExampleJavaServices:EuroConverter");
      myCall.setMethodName("convert2EUR");

    	myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
      Vector params = new Vector();

		params.addElement(new Parameter("inCurrency", Short.class, Short.toString(inCurrency), null));
		params.addElement(new Parameter("amount", Double.class, Double.toString(amount), null));

      myCall.setParams(params);

      // invoke it
      Response resp=null;
      try
      {
         resp = myCall.invoke(url, null);
      } //try
      catch(SOAPException e)
      {
         System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ());
      } //catch

      // check response
      if (!resp.generatedFault())
      {
         Parameter ret = resp.getReturnValue();
         //convert from EUR to native currency
         myCall.setMethodName("convertFromEUR");
    	   myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
         params.clear();
         params.addElement(new Parameter("destinationCurrency", Short.class, Short.toString(outCurrency), null));
		   params.addElement(new Parameter("amount", Double.class, ret.getValue().toString(), null));

         myCall.setParams(params);

         // invoke it
         resp=null;
         try
         {
            resp = myCall.invoke(url, null);
         } //try
         catch(SOAPException e)
         {
            System.err.println("Caught SOAPException (" + e.getFaultCode () + "): " + e.getMessage ());
         } //catch

         // check response
         if (!resp.generatedFault())
         {
            ret = resp.getReturnValue();
            return Double.parseDouble(ret.getValue().toString());
         } //if
         else
         {
            Fault fault = resp.getFault();
            System.err.println("Generated fault: ");
            System.out.println("  Fault Code   = " + fault.getFaultCode());
            System.out.println("  Fault String = " + fault.getFaultString());
         } //else
      } //if
      else
      {
         Fault fault = resp.getFault();
         System.err.println("Generated fault: ");
         System.out.println("  Fault Code   = " + fault.getFaultCode());
         System.out.println("  Fault String = " + fault.getFaultString());
      } //else

      //never gets here
		return 0;
	} //convert()
} //class CurrencyConvert
