public class WsClient {
public static void testRPCClient() {
try {
// axis2 服务端
String url = "http://localhost:8080/sa/services/updateAlertStatus?wsdl";
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(url);
Options options = serviceClient.getOptions();
// 确定目标服务地址
options.setTo(targetEPR);
// 确定调用方法
options.setAction("urn:updateStatus");
/**
* 指定要调用的getPrice方法及WSDL文件的命名空间 如果 webservice 服务端由axis2编写 命名空间
* 不一致导致的问题 org.apache.axis2.AxisFault: java.lang.RuntimeException:
* Unexpected subelement arg0
*/
QName qname = new QName("http://www.w3.org/2001/XMLSchema", "updateStatus");
WsUpdateAlertReq reqObj = new WsUpdateAlertReq();
reqObj.setAlertCode(148368863803747L);
reqObj.setAlertType(1);
// 指定getPrice方法的参数值
Object[] parameters = new Object[] { reqObj };
// 指定getPrice方法返回值的数据类型的Class对象
Class[] returnTypes = new Class[] { WsUpdateAlertReq.class };
// 调用方法一 传递参数,调用服务,获取服务返回结果集
OMElement element = serviceClient.invokeBlocking(qname, parameters);
// 值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。
// 我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果
String result = element.getFirstElement().getText();
System.out.println(result);
// 调用方法二 getPrice方法并输出该方法的返回值
Object[] response = serviceClient.invokeBlocking(qname, parameters, returnTypes);
// String r = (String) response[0];
WsUpdateAlertRes r = (WsUpdateAlertRes) response[0];
System.out.println(r);
} catch (AxisFault e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WsClient.testRPCClient();
}
}
目前遇到的问题,就是入参,在服务端接受入参为null为空。以下是入参对象
public class WsUpdateAlertReq implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private long alertCode;
private int alertType;
public long getAlertCode() {
return alertCode;
}
public void setAlertCode(long alertCode) {
this.alertCode = alertCode;
}
public int getAlertType() {
return alertType;
}
public void setAlertType(int alertType) {
this.alertType = alertType;
}
}