httpClient post 调用从 servlet 失败并出现错误 java.lang.NoSuchMethodError:
Posted
技术标签:
【中文标题】httpClient post 调用从 servlet 失败并出现错误 java.lang.NoSuchMethodError:【英文标题】:httpClient post call failing from a servlet with error java.lang.NoSuchMethodError: 【发布时间】:2015-04-13 00:18:06 【问题描述】:我正在尝试使用 apache http-components 客户端库从 servlet 进行 http post 调用,但遇到以下错误。
java.lang.NoSuchMethodError:org.apache.http.entity.StringEntity.(Ljava/lang/String;Lorg/apache/http/entity/ContentType;)V 在 org.apache.http.client。 entity.UrlEncodedFormEntity.(UrlEncodedFormEntity.java:77)
在我尝试在代码中创建 UrlEncodedEntity 对象时
我查看了另一篇帖子,他们说,这主要是因为构建路径的差异,我将所有 http-components 的库放在 WEB_INF/lib 中(我希望这是正确的)库的版本是 4.4 .这是我写的代码。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
PrintWriter out =response.getWriter();
out.println("Hit");
String serviceUrl = request.getParameter("url");
String data = request.getParameter("data");
String type = request.getParameter("type");
String dataType = request.getParameter("dataType");
if(null != serviceUrl && !serviceUrl.trim().equals(""))
if(type.equalsIgnoreCase("POST"))
try
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://10.53.204.233:6504/app/service/"+serviceUrl);
try
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("type",type ));
nameValuePairs.add(new BasicNameValuePair("dataType",dataType ));
nameValuePairs.add(new BasicNameValuePair("data",data ));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs, Consts.UTF_8);
post.setEntity(entity);
HttpResponse responseTeamServer = client.execute(post);
BufferedReader rd = new BufferedReader(new InputStreamReader(responseTeamServer.getEntity().getContent()));
String line = "";
StringBuilder sb = new StringBuilder();
while ((line = rd.readLine()) != null)
sb.append(line);
response.getWriter().write(sb.toString());
response.getWriter().flush();
response.getWriter().close();
catch (IOException e)
e.printStackTrace();
finally
else
else
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
感谢您提供这方面的任何帮助或指导。 谢谢
【问题讨论】:
我也有类似的问题。你解决了吗? @Dan 我认为问题是类路径中库的多个版本。 【参考方案1】:你的代码编译了吗?你在运行时遇到过这个问题吗?在这种情况下,您的类路径中有多个版本的库。
看到 StringEntity 类是从版本 4 开始引入的,服务器/lib 有可能加载了较早版本的库。
调试它的一种方法是添加 java -verbose:class 到您的服务器启动脚本。它将输出类信息,其中包括加载类的路径(jar)文件。请注意,它会为每个加载的类打印出这个,这可能是需要筛选的大量数据。
【讨论】:
是的,代码编译,这个错误是在运行时。感谢您提供调试提示。【参考方案2】:正如 javadoc 所说,这个构造函数接受一个字符串作为第二个参数,而不是一个 Charset 对象
【讨论】:
hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/…, 文档包含带有字符集的构造函数以上是关于httpClient post 调用从 servlet 失败并出现错误 java.lang.NoSuchMethodError:的主要内容,如果未能解决你的问题,请参考以下文章
MVC HttpClient多个post请求,得到不匹配的响应