cxf客户端调用webservice接口,服务器端重启后调用失败,改为Restful方式调用
2017-03-14 09:53
1071 查看
之前用cxf客户端调用soap协议的webservice接口,发现一个问题:
如果服务端需要重启,在重启期间(服务未成功启动之前),cxf客户端调用了服务,返回失败结果(因为服务端未启动),等服务端重启 后,cxf客户端调用服务一直失败,只有cxf客户端重启后方可继续使用。
所以调用方式改为restful方式,post方式调用,接收返回的xml文件,服务端的重启就不会影响到客户端了 。
之前cxf客户端调用方式:
public static String sendfxBackEnd(String methodName,String json, String prokey) {
String rs = "";
try {
// 这个是用cxf 客户端访问cxf部署的webservice服务
// 千万记住,访问cxf的webservice必须加上namespace ,否则通不过
// 现在又另外一个问题,传递过去的参数服务端接收不到
logger.info("发送WS->sendBackEnd请求:" + rs);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory
.newInstance();
Client client = dcf
.createClient(ConfigUtil.getProperty("config.properties", prokey));
// url为调用webService的wsdl地址
QName qname = new QName(ConfigUtil.getProperty("config.properties", prokey+"Ns"),
methodName);
String strXml = "";
// paramvalue为参数值
logger.info("发送WS请求:sendfxBackEnd=" + json);
Object[] result = client.invoke(qname, json);
// 调用web Service//输出调用结果
rs = result[0].toString();
logger.info("接收WS应答:" + rs);
} catch (Exception ex) {
ex.printStackTrace();
}
return rs;
}
restful调用方式:
如果服务端需要重启,在重启期间(服务未成功启动之前),cxf客户端调用了服务,返回失败结果(因为服务端未启动),等服务端重启 后,cxf客户端调用服务一直失败,只有cxf客户端重启后方可继续使用。
所以调用方式改为restful方式,post方式调用,接收返回的xml文件,服务端的重启就不会影响到客户端了 。
之前cxf客户端调用方式:
public static String sendfxBackEnd(String methodName,String json, String prokey) {
String rs = "";
try {
// 这个是用cxf 客户端访问cxf部署的webservice服务
// 千万记住,访问cxf的webservice必须加上namespace ,否则通不过
// 现在又另外一个问题,传递过去的参数服务端接收不到
logger.info("发送WS->sendBackEnd请求:" + rs);
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory
.newInstance();
Client client = dcf
.createClient(ConfigUtil.getProperty("config.properties", prokey));
// url为调用webService的wsdl地址
QName qname = new QName(ConfigUtil.getProperty("config.properties", prokey+"Ns"),
methodName);
String strXml = "";
// paramvalue为参数值
logger.info("发送WS请求:sendfxBackEnd=" + json);
Object[] result = client.invoke(qname, json);
// 调用web Service//输出调用结果
rs = result[0].toString();
logger.info("接收WS应答:" + rs);
} catch (Exception ex) {
ex.printStackTrace();
}
return rs;
}
restful调用方式:
package com.market.common.protocol; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class RestfulClientUtils { /** * 参考示例 * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String url = "http://127.0.0.1:8800/axis2/services/fx.adapter/crm"; String param = "{\"op\":\"cashorder\", \"aid\":\"3000566\"}"; String ret = call(url, param); System.out.println("ret: " + ret); } public static String call(String urlPath, String param) throws Exception { StringBuffer sb = new StringBuffer(); // 建立连接 URL url = new URL(urlPath); // 如有中文一定要加上,在接收方用相应字符转码即可 param = "args0=" + URLEncoder.encode(param, "utf-8"); // 参数 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置参数 conn.setDoOutput(true); // 需要输出 conn.setDoInput(true); // 需要输入 conn.setUseCaches(false); // 不允许缓存 conn.setConnectTimeout(10000); // conn.setReadTimeout(10000); conn.setRequestMethod("POST"); // 设置POST方式连接 // 设置请求属性 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接 conn.setRequestProperty("Charset", "UTF-8"); // 连接,也可以不用明文connect,使用下面的httpConn.getOutputStream()会自动connect conn.connect(); // 建立输入流,向指向的URL传入参数 DataOutputStream dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(param); dos.flush(); dos.close(); // 获得响应状态 int resultCode = conn.getResponseCode(); if (HttpURLConnection.HTTP_OK == resultCode) { String readLine = new String(); BufferedReader responseReader = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8")); while ((readLine = responseReader.readLine()) != null) { sb.append(readLine).append("\n"); } responseReader.close(); return parseXmlStr(sb.toString()); } return null; } /** * 解析xml字符串,提取返回内容 * @param xmlStr * @return */ public static String parseXmlStr(String xmlStr) { String ret = null; Document doc = null; try { doc = DocumentHelper.parseText(xmlStr); //将字符串转为XML Element root = doc.getRootElement(); // 获取根节点 ret = root.elementTextTrim("return"); } catch (Exception e) { e.printStackTrace(); } return ret; } }
相关文章推荐
- webservice接口常见问题1:客户端使用SOAP方式调用CXF服务时异常
- spring整合cxf方式发布的rest webservice,调用接口
- CXF开发webService客户端调用服务器端测试
- java 用cxf方式实现的webservice,java客户端,C#客户端调用
- webservice客户端调用方式(cxf)
- Android客户端调用服务器端发布的WebService(CXF)
- Spring整合CXF,发布RSETful 风格WebService--编写客户端代码,调用RESTful WebService
- Java 调用C# webservice接口 生成java客户端 实现方式
- cxf客户端代码调用cxf的webservice接口,报错:XJC,classnotfound,引入了tool.jar,却还是报classnotfound
- webservice客户端调用方式(cxf)
- 简单CXF方式的webService客户端调用范例
- 客户端axis调用cxf服务端webservice接口问题
- java调用CXF WebService接口的两种方式
- java(jeecg框架) 调用CXF WebService接口的两种方式
- CXF客户端调用webservice接口报错
- restful接口客户端和服务端开发,HttpURLConnection,HttpClient,post ,get方式调用
- webservice客户端调用方式(cxf)
- 360doc-----简单CXF方式的webService客户端调用范例
- CXF客户端调用?wsdl webservice接口开发