一般调用webSevice:
String service = "reqFun";
String url ="http://123.456.11.22/ceshi/api?wsdl";
String param = "canshu";
public static CallWsResult calWebService(String service,String url,String param) {if (StringUtils.isEmpty(param)) {return null;}CallWsResult callWsResult = new CallWsResult();try {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(url);/* HTTPConduit conduit = (HTTPConduit) client.getConduit();HTTPClientPolicy policy = new HTTPClientPolicy();long timeout = 10 * 1000;policy.setConnectionTimeout(timeout);policy.setReceiveTimeout(timeout);conduit.setClient(policy);*/LoggerUtil.info(CallWsResult.class,"----------------------开始"+service+"接口调用--------------------");Object[] objects = client.invoke(service, param);String result = objects[0].toString();LoggerUtil.info(CallWsClientUtils.class,service+"接口返回结果====>"+ result);callWsResult.setCallResult(result);;} catch (Exception e) {LoggerUtil.error(CallWsClientUtils.class, service+"接口调用失败" + e.getMessage());}return callWsResult;}
调用后发现接口报错:
百度报错原因:
使用下面这个方法就可以修复报错:
public static ScanPayWsResult scanPayWebService(String service, String url, String param) {if (StringUtils.isEmpty(param)) {return null;}ScanPayWsResult scanPayWsResult = new ScanPayWsResult();try {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(url);LoggerUtil.info(ScanPayWsResult.class,"----------------------开始"+service+"接口调用--------------------");// 下面一段处理 WebService接口和实现类namespace不同的情况// CXF动态客户端在处理此问题时,会报No operation was found with the name的异常Endpoint endpoint = client.getEndpoint();QName opName = new QName(endpoint.getService().getName().getNamespaceURI(), "reqFun");BindingInfo bindingInfo = endpoint.getEndpointInfo().getBinding();if (bindingInfo.getOperation(opName) == null) {for (BindingOperationInfo operationInfo : bindingInfo.getOperations()) {if ("reqFun".equals(operationInfo.getName().getLocalPart())) {opName = operationInfo.getName();break;}}}Object[] objects = client.invoke(opName, param);String resultRes = objects[0].toString();String replaceAll = resultRes.replaceAll("&", "&");JSONObject jsonObject = XML.toJSONObject(replaceAll);ScanPayWsResult result = JSON.parseObject(JSON.toJSONString(jsonObject.get("request")), ScanPayWsResult.class);LoggerUtil.info(CallWsClientUtils.class,service+"接口返回结果====>"+ result);return result;} catch (Exception e) {LoggerUtil.error(CallWsClientUtils.class, service+"接口调用失败" + e.getMessage());}return scanPayWsResult;}