package com.axis2; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class WebService { public static void main(String[] args) { try { // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); // 直接引用远程的wsdl文件(创建WSDL的URL,注意不是服务地址) String url = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl"; // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference(url); Options options = serviceClient.getOptions(); // 确定目标服务地址 options.setTo(targetEPR); // 确定调用方法(wsdl 命名空间地址 (wsdl文档中的targetNamespace) 和 方法名称 的组合) options.setAction("http://WebXml.com.cn/getMobileCodeInfo"); // 指定方法的参数值 Object[] parameters = new Object[] {"18259153461", ""}; // 创建服务名称 // 参数1:namespaceURI - 命名空间地址 (wsdl文档中的targetNamespace) // 参数2:localPart - 服务视图名 (wsdl文档中operation的方法名称,例如<wsdl:operation name="getMobileCodeInfo">) QName qname = new QName("http://WebXml.com.cn/", "getMobileCodeInfo"); // 调用方法一 传递参数,调用服务,获取服务返回结果集 /* OMElement element = serviceClient.invokeBlocking(qname, parameters); System.out.println(element); * 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 * 我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果 String result = element.getFirstElement().getText(); System.out.println(result);*/ // 调用方法二 getPrice方法并输出该方法的返回值 // 指定方法返回值的数据类型的Class对象 Class[] returnTypes = new Class[] {String.class}; Object[] response = serviceClient.invokeBlocking(qname, parameters, returnTypes); String result = (String) response[0]; System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }