调用.asmx的webservice接口开始代码如下
method = "method";
params = "params1 ,params2";
paramsName = "strTagNum,strTimestamp";
List<String> paramsList= Arrays.asList(params.split(","));
Object[] param = paramsList.toArray();
List<String> nameList= Arrays.asList(paramsName.split(","));
String url = "http://******.asmx";// 提供接口的地址
String soapaction = "http://tempuri.org/"; //这个由接口提供者提供
Service service = new Service();
try{
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(soapaction, method)); // 设置要调用哪个方法
// 设置要传递的参数--要和接口方提供的参数名一致
for (String name:nameList) {
call.addParameter(new QName(soapaction, name), XMLType.XSD_STRING, ParameterMode.IN);
}
call.setReturnType(XMLType.XSD_STRING); // 要返回的数据类型
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapaction + method);
// 调用方法并传递参数
String object = (String) call.invoke(param);
System.out.println(object);
} catch (Exception ex) {
ex.printStackTrace();
}
结果出了报错Caused by: org.xml.sax.SAXException: SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
后把要返回的数据类型改为XMLType.XSD_SCHEMA接收到数据在进行解析,后半段数据改为:
call.setReturnType(XMLType.XSD_SCHEMA); // 要返回的数据类型
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapaction + method);
// 调用方法并传递参数
Schema object = (Schema) call.invoke(param);
MessageElement[] any = object.get_any();
if(any!=null){
if(any.length>0){
System.out.println(any[0].getValue() + "-"+any[1].getValue()+"-"+any[2].getValue()+"-"+any[3].getValue());
}
}