package sample.pojo.rpcclient;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import sample.pojo.data.Weather;

public class WeatherRPCClient {

    public static void main(String[] args1) throws AxisFault {

        RPCServiceClient serviceClient = new RPCServiceClient();

        Options options = serviceClient.getOptions();

        options.setManageSession(true);
        serviceClient.engageModule(new QName("addressing"));

        EndpointReference targetEPR = new EndpointReference(
                "http://localhost:8080/axis2/services/WeatherService");

        options.setTo(targetEPR);

        // Setting the weather
        QName opSetWeather = new QName("http://service.pojo.sample/xsd",
                "setWeather");

        Weather w = new Weather();

        w.setTemperature((float) 39.3);
        w.setForecast("Cloudy with showers");
        w.setRain(true);
        w.setHowMuchRain((float) 4.5);

        Object[] opSetWeatherArgs = new Object[] { w };

        options.setAction("urn:setWeather");
        // serviceClient.invokeRobust(opSetWeather, opSetWeatherArgs);
        serviceClient.invokeBlocking(opSetWeather, opSetWeatherArgs,
                new Class[] { boolean.class });

        // Getting the weather
        QName opGetWeather = new QName("http://service.pojo.sample/xsd",
                "getWeather");

        Object[] opGetWeatherArgs = new Object[] {};
        Class[] returnTypes = new Class[] { Weather.class };

        options.setAction("urn:getWeather");
        Object[] response = serviceClient.invokeBlocking(opGetWeather,
                opGetWeatherArgs, returnTypes);

        Weather result = (Weather) response[0];

        if (result == null) {
            System.out.println("Weather didn't initialize!");
            return;
        }

        // Displaying the result
        System.out.println("Temperature               : "
                + result.getTemperature());
        System.out.println("Forecast                  : "
                + result.getForecast());
        System.out.println("Rain                      : " + result.getRain());
        System.out.println("How much rain (in inches) : "
                + result.getHowMuchRain());

    }
}
