一般调用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;
}
因篇幅问题不能全部显示,请点此查看更多更全内容