我正在使用所有最新的jar和Java 8和Java EE 6版本,获得java.lang.NoSuchMethodError
。
尝试使用jersey-client-2.27.jar
,2.26
,2.28
版本,但仍然存在相同的问题,甚至检查了该方法在相应的jar中是否可用。
Client client = ClientBuilder.newClient();
WebTarget sendWT = client.target(blueMailUrl);
Invocation.Builder builder = sendWT
.request(MediaType.APPLICATION_JSON)
.header(
"Authorization",
"Basic " + DatatypeConverter.printBase64Binary((byte[]) (blueMailUserid + ":" + blueMailPassword).getBytes("UTF-8"))
);
它不应引发此错误。
答案 0 :(得分:1)
最有可能在类路径中位于jersey-jar前面的其他jar中包含较旧版本的MultivaluedMap。
在代码中添加以下行(在发生错误之前)
System.out.println(getClass().getClassLoader().getResource("javax/ws/rs/core/MultivaluedMap.class"));
这将输出找到该类的位置,类似
jar:file:/D:/myide/workspace/MyProject/lib/jars/someotherlibrary.jar!/javax/ws/rs/core/MultivaluedMap.class
要解决这个问题,取决于上述调用的实际结果,整个过程称为Jar-Hell。它可以在您的IDE中使用,因为在那里设置的类路径似乎与运行应用程序时设置的类路径不同。
编辑(因为现在知道位置):EE6的j2ee.jar包含一个不带addAll
方法的MultvaluedMap,并且因为j2ee.jar似乎位于jersey-jar之前的类路径中。如NoSuchMethodError: MultivaluedMap.addAll in Jersey Client中所述,解决方案是使用Jersey 1.8或J2EE7。另一个未讨论的解决方案是完全不使用j2ee.jar,而只使用您实际使用的子项目的jar。如果只使用Activation.jar和javamail.jar来发送邮件等。