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();
}
}
}