face++的开发包faceppsdk.jar 和httpclient.jar 冲突解决
来源:互联网 发布:淘宝卖家交流群 编辑:程序博客网 时间:2024/06/06 07:51
最近在做项目的时候客户要了一个头像对比的功能,程序上还有一个功能需要跨域访问其他项目!已开始想直接使用JQuery 的$.post 访问,发现此功能需要去修改服务端,于是想用httpclient 直接在程序里访问。
将所有的代码都写完后,编译都没有问题;但是程序运行后,测试功能时后台报错!错误如下:
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:919)
修改方法:
1. 保留com.facepp代码,去除org下面代码,修改facepp下代码的依赖,并引入依赖包httpcore-4.4.jar,httpmime-4.5.2.jar,json.jar。
2. 删除faceppsdk.jar,即可解决问题。
将faceppsd.jar 用压缩包的方式打开后,发现是包含源码的;新建项目将源码复制到项目中,删掉org 下面的代码,引入上面三个jar 包,修改HttpRequests.java 中的代码依赖。发现HttpRequests.java 中用到了过时的MultipartEntity 类(项目用的jdk1.7),引入的httpcore-4.4.jar 中已放弃了MultipartEntity 类,使用MultipartEntityBuilder 来替代。最后根据网上的HttpClient 的使用方法,将HttpRequests.java 中访问face++ 接口的代码修改后,最终的方法如下:
public JSONObject request(String control, String action, PostParameters params) throws FaceppParseException {URL url;HttpURLConnection urlConn = null;CloseableHttpClient client = null;HttpPost httpPost = null;CloseableHttpResponse response = null;try {url = new URL(webSite+control+"/"+action);/*urlConn = (HttpURLConnection) url.openConnection(); urlConn.setRequestMethod("POST"); urlConn.setConnectTimeout(httpTimeOut); urlConn.setReadTimeout(httpTimeOut); urlConn.setDoOutput(true); urlConn.setRequestProperty("connection", "keep-alive"); urlConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + params.boundaryString()); */ System.out.println(params.boundaryString());client = HttpClients.createDefault();httpPost = new HttpPost(url.toString()); httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + params.boundaryString()); httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); httpPost.setHeader("connection", "keep-alive"); //MultipartEntity reqEntity = params.getMultiPart(); MultipartEntityBuilder reqEntity = params.getMultiPart(); reqEntity.addTextBody("api_key", apiKey); reqEntity.addTextBody("api_secret", apiSecret); HttpEntity httpEntity = reqEntity.build(); httpPost.setEntity(httpEntity); response = client.execute(httpPost); String resultString = null; int responseCode = response.getStatusLine().getStatusCode(); if(responseCode == 200) resultString = readString(response.getEntity().getContent()); else resultString = ""; EntityUtils.consume(httpEntity); response.close();//释放链接 /* reqEntity.writeTo(urlConn.getOutputStream()); String resultString = null; if (urlConn.getResponseCode() == 200) resultString = readString(urlConn.getInputStream()); else resultString = readString(urlConn.getErrorStream()); */ //FaceppResult result = new FaceppResult( new JSONObject(resultString), urlConn.getResponseCode()); JSONObject result = new JSONObject(resultString); if (result.has("error")) { if (result.getString("error").equals("API not found")) throw new FaceppParseException("API not found"); throw new FaceppParseException("API error.", result.getInt("error_code"), result.getString("error"), responseCode); } result.put("response_code", responseCode); //urlConn.getInputStream().close(); return result;} catch (Exception e) {throw new FaceppParseException("error :" + e.toString());} finally {if (urlConn != null)urlConn.disconnect();}}
最后修改后的jar 下载路径:http://download.csdn.net/detail/t_zm_cross/9600963
- face++的开发包faceppsdk.jar 和httpclient.jar 冲突解决
- jar包冲突的解决
- jar包冲突解决
- 怎样解决maven项目中依赖的jar包和tomcat中的jar包的冲突
- 解决asm.jar包的冲突
- 解决cxf的jar包冲突
- 解决cxf的jar包冲突
- 解决jar包冲突的问题
- 解决cxf的jar包冲突
- Struts2 的jar包冲突如何解决?
- elasticsearch的jar包冲突解决笔记
- 解决jar包里面的文件冲突
- jar包的冲突问题如何解决
- 【已解决】web项目中新加的jar包和tomcat自带的jar冲突问题
- jar包的冲突
- 如何解决jar包冲突和类冲突
- NoSuchMethodError,解决jar包冲突
- Maven解决jar包冲突
- Java继承中的构造器实现
- mybatis学习详细动态sql语句示范
- Mathematica 11.0中的一些新特性
- 谈谈这一年来做项目的经历(1)
- AWT-2
- face++的开发包faceppsdk.jar 和httpclient.jar 冲突解决
- STL学习小结
- unity本地网络下载工具-HFS文件服务器教程
- Android Studio 小技巧合集
- 一个简单的Vector实现
- 正确理解web交互中的cookie与session
- 听老师讲创业的那些事情
- AWT-3
- Yii2 UT