原始代码如下:
public String getMyMatter1(HttpServletResponse res, String uuid, String num, String pagenum){
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods","GET, POST");
Map<String,Object> map = new HashMap<>();
if(StringUtil.isNotEmpty(uuid) && StringUtil.isNotEmpty(num) || StringUtil.isNotEmpty(pagenum)){
try{
int overtime = 60 * 1000; ///超时时间,默认60秒
String oprName = "getTransList";
List<Object> value = new ArrayList<Object>();
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL("http://***/external?wsdl"));
call.setTimeout(overtime);
call.addParameter("uuid", XMLType.XSD_STRING, ParameterMode.IN);
value.add(uuid);
call.addParameter("pagenum", XMLType.XSD_INT, ParameterMode.IN);
value.add(Integer.parseInt(pagenum));
call.addParameter("num", XMLType.XSD_INT, ParameterMode.IN);
value.add(Integer.parseInt(num));
call.setReturnType(XMLType.XSD_STRING);
call.setOperationName(oprName);
Object result = call.invoke(value.toArray());
String jsonResult = (String)result;
return jsonResult;
} catch (Exception e) {
map.put("result","fail");
map.put("message","异常");
}
}else{
map.put("result","fail");
map.put("message","参数错误");
}
return JsonUtil.objectToString(map);
}
一开始我心想是不是方法名有多个,就尝试着将方法名指定命名空间,加上call.setOperationName(new QName("http://***/external/","getTransList")),加上之后还是不行。然后我到网上找了一个调用webservice接口的示例,对比了一下代码,发现自己代码的入参没有指定相应的命名空间,加上call.addParameter(new QName("http://***/external/","num"), XMLType.XSD_INT,ParameterMode.IN),加上之后用postman调用还是不行,依旧是数据为空。找了几个小时,其他方面都没有问题,最后实在没办法了,就想着把参数顺序换了一下,我也不知道怎么会这么想,就这么做了,竟然还成功了。[手动笑哭]以下是成功后的代码,希望对大家有所启发:
public String getMyMatter(HttpServletResponse res, String uuid, String num, String pagenum){
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods","GET, POST");
Map<String,Object> map = new HashMap<>();
if(StringUtil.isNotEmpty(uuid) && StringUtil.isNotEmpty(num) || StringUtil.isNotEmpty(pagenum)){
try{
int overtime = 60 * 1000; ///超时时间,默认60秒
final String endpoint = "http://***/external?wsdl";
String rec_msg = "";
try {
// 创建一个服务(service)调用(call)
Service service = new Service();
Call call = (Call) service.createCall();
// 设置service所在URL
call.setTargetEndpointAddress(new URL(endpoint));
call.setUseSOAPAction(true);
call.setTimeout(overtime);
// 设置参数
call.addParameter(new QName("http://***/external/","uuid"), XMLType.XSD_STRING,ParameterMode.IN);
call.addParameter(new QName("http://***/external/","pagenum"), XMLType.XSD_INT,ParameterMode.IN);
call.addParameter(new QName("http://***/external/","num"), XMLType.XSD_INT,ParameterMode.IN);
// 指定方法名
call.setOperationName(new QName("http://***/external/","getTransactList"));
// 设置返回值类型
call.setReturnType(XMLType.XSD_STRING);
// 远程调用webservice接口
rec_msg = (String) call.invoke(new Object[] {uuid,Integer.parseInt(num),Integer.parseInt(pagenum)});
return rec_msg;
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
} catch (Exception e) {
map.put("result","fail");
map.put("message","异常");
}
}else{
map.put("result","fail");
map.put("message","参数错误");
}
return JsonUtil.objectToString(map);
}