调用WebService接口的方法有两种,
第一种就是RPC方式,很复杂
第二种用命令生成客户端代码方式调用,比较方便
使用RPC方式调用WebService的步骤如下:
1)创建RPCServiceClient对象
2)创建EndpointReference对象,并指定要访问WebService的URL(不包含wsdl)
3)创建QName对象,并指定要调用的WebService方法
4)创建描述WebService方法参数值的Object[]对象
5)创建描述WebService方法返回值类型的Class[]对象
6)使用RPCServiceClient类的invokeBlocking方法调用WebService方法
注意:invokeBlocking方法返回一个Object[]对象,如果方法返回单值,可以引用Object[]对象的第一个元素,也就是Object[0]
package client;
import org.apache.axis2.rpc.client.RPCServiceClient;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
public class MyClient {
public static void main(String[] args) throws AxisFault {
/** 调用webser中nextNum方法 **/
//第一步 创建RPCServiceClient对象
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
//第二步 远程wsdl文件
EndpointReference target = new EndpointReference(
"http://localhost:8080/axis2/services/JaxWSImplService");
options.setTo(target);
//第三步 命名空间和方法
QName addEntry = new QName("http://impl.service.jax/", "sayHello");
//第四步 传入方法的参数,没有的话定义空数组
Object[] addEntryArgs = new Object[]{ "shanshanbox.com" };
//第五步 方法的返回值,可以不存在
Class[] classes = new Class[] {String.class};
Object[] invokeBlocking = serviceClient.invokeBlocking(addEntry, addEntryArgs, classes);
System.out.println(invokeBlocking[0]);
/** 调用webser中nextNum方法 **/
addEntry = new QName("http://impl.service.jax/", "nextNum");
classes = new Class[] { int.class };
invokeBlocking = serviceClient.invokeBlocking(addEntry, new Object[]{ }, classes);
System.out.println(invokeBlocking[0]);
}
}
使用RPC方式调用WebService应注意如下几点:
1)客户端需要引用必要的jar包,反正我是把axis2的lib文件夹下所有的jar文件引入
2)上面的代码中使用RPCServiceClient类的invokeBlocking方法调用WebService方法。
invokeBlocking方法有三个参数,其中第一个类型是QName对象,表示要调用的方法;第二个
参数表示要调用的WebService方法的参数值,参数类型为Object[];第三个参数表示WebService
方法的返回值类型的Class对象,参数类型为Class[],当方法没有参数时,invokeBlocking方法的
第二个参数值不能为null。要使用new Object[]()
3)调用的WebService没有返回值,应使用RPCService类的invokeRobust方法,该方法只有两个参数
4)在创建QName对象时,QName类的构造方法的第一个参数表示WSDL的命名空间,也就是
5)如果出现如下这种错误
Exception in thread "main" org.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)
请检查一下你的services.xml配置文件是否正确,如下格式
Web Service例子 com.hous.service.SimpleService
Game Over You Are Win