如何在java中使用相同的输入调用不同供应商提供的多个Web服务

时间:2012-06-06 16:18:23

标签: java web-services axis2

我是websevices的新手。我的要求是调用不同供应商提供的不同Web服务,并在java类中使用相同的输入。例如:天气信息由不同供应商提供,所有供应商都将输入作为城市名称。我想在java类中调用一个方法,该类调用不同供应商提供的并行的所有webservices。然后我必须通过供应商(使用axis2的所有供应商)在jsp中显示结果。

1 个答案:

答案 0 :(得分:0)

如果你有相同的输入,这应该不难。

假设您使用的是axis2 Java API,您可以执行以下操作:

public class Test {

    public static void main(String[] args) throws AxisFault,Exception {

        RPCServiceClient serviceClient = new RPCServiceClient();
        Options options = serviceClient.getOptions();

        String [] vendors = {"http://example.com/vendor1/services/GETWeatherHttpSoap12Endpoint", "http://example.com/vendor2/services/GETWeatherHttpSoap12Endpoint"}; // Array of all vendors

        for (String vendor : vendors) {
            EndpointReference targetEPR = new EndpointReference(vendor);
            options.setTo(targetEPR);
            QName opGetExchange = new QName("http://ws.apache.org/axis2", "getWeather");

            // preparing the parameters
            String country = "USA";
            Object[] opGetExchangeArgs = new Object[] {country};

            // preparing the return type
            Class[] returnTypes = new Class[] { String.class };

            // invoking the service passing in the arguments and getting the response
            Object[] response = serviceClient.invokeBlocking(opGetExchange, opGetExchangeArgs, returnTypes);
            // obtaining the data from the response
            String result = (String) response[0];

            System.out.println("Vendor: " + result);
        }
    }
}

这将在不同的行上打印出每个供应商的结果。