webservice接口中转后可以成功访问但是拿取不到数据

185 阅读2分钟

原始代码如下:

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