【问题标题】:Jersey REST get returns java.lang.NoSuchMethodErrorJersey REST get 返回 java.lang.NoSuchMethodError
【发布时间】:2013-11-23 02:41:52
【问题描述】:

我正在尝试从正常工作的 REST 网络服务中获取响应。

我在查看文档时想出了以下内容:

void postRest()
{
    Client client = ClientBuilder.newClient();
    WebTarget webTarget = client.target("http://localhost:8080/TestApplication/");
    WebTarget resourceWebTarget = webTarget.path("webresources");
    WebTarget peopleWebTarget = resourceWebTarget.path("people/get/all");

    Invocation invocation = peopleWebTarget.request("text/xml").header("Content-Type", "application/xml").buildGet();
    String response = invocation.invoke(String.class);

    System.out.println(response);
}

然而我却回了一个不太友好的:

Exception in thread "main" java.lang.NoSuchMethodError: org.glassfish.jersey.message.internal.MessagingBinders$MessageBodyProviders.<init>(Ljava/util/Map;Ljavax/ws/rs/RuntimeType;)V
    at org.glassfish.jersey.client.ClientBinder.configure(ClientBinder.java:118)
    at org.glassfish.hk2.utilities.binding.AbstractBinder.bind(AbstractBinder.java:169)
    at org.glassfish.jersey.internal.inject.Injections.bind(Injections.java:157)
    at org.glassfish.jersey.internal.inject.Injections._createLocator(Injections.java:147)
    at org.glassfish.jersey.internal.inject.Injections.createLocator(Injections.java:137)
    at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:352)
    at org.glassfish.jersey.client.ClientConfig$State.access$000(ClientConfig.java:85)
    at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:117)
    at org.glassfish.jersey.client.ClientConfig$State$3.get(ClientConfig.java:114)
    at org.glassfish.jersey.internal.util.collection.Values$LazyValue.get(Values.java:275)
    at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:669)
    at org.glassfish.jersey.client.ClientRequest.getConfiguration(ClientRequest.java:276)
    at org.glassfish.jersey.client.JerseyInvocation.validateHttpMethodAndEntity(JerseyInvocation.java:124)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:97)
    at org.glassfish.jersey.client.JerseyInvocation.<init>(JerseyInvocation.java:90)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.buildGet(JerseyInvocation.java:201)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.buildGet(JerseyInvocation.java:154)
    at client.RestClient.postRest(RestClient.java:24)
    at client.RestClient.main(RestClient.java:14)
Java Result: 1

我正在使用 NetBeans 并没有添加任何库,因为 GlassFish Server 似乎带有 javax.ws.rs-api.jar 使上述运行。

我是否还需要在库中添加 Jersey.jar 或者我遗漏了什么? 谢谢

【问题讨论】:

标签: rest jakarta-ee glassfish-4 jersey-client jersey-2.0


【解决方案1】:

似乎 Jersey 开发人员非常以 maven 为中心,不鼓励手动包含 jar,因此,如果您不使用 maven,而是在 NetBeans 中包含 jar,则需要添加 jaxrs-ri 的全部内容,包括里面的 jar上面代码运行的ext/目录。

附带说明,如果您在同一个项目中使用 jersey 的客户端和服务器端,手动包含 jar 可能会破坏服务器端,因此最好将它们分开!

【讨论】:

    【解决方案2】:

    我在尝试在 Eclipse 中运行上述代码时遇到了这个问题。

    1) 第一个问题是包含org.jboss.resteasy.jaxrs-api,它解决了编译问题但没有解决运行时问题,给出了上面提到的异常。解决这个问题的方法就是在你的 pom 中包含org.jboss.resteasy.rest-client

    2) 第二个问题是我开始收到java.lang.NoSuchMethodError: org.jboss.resteasy.spi.ResteasyProviderFactory.&lt;init&gt;(Lorg/jboss/resteasy/spi/ResteasyProviderFactory;)V 异常。问题是在 Eclipse 中我在服务器中定义了 jBoss EAP 6.3 版,即使项目没有使用它,jar 仍然包含在类路径中,导致运行时发生冲突。

    然后解决方案是打开一个新的工作区或没有定义 jBoss EAP 服务器的新 Eclipse 副本,或者更新当前 jBoss EAP 6.3 服务器中的 resteasy 模块。这是此线程中的最终建议:RESTEasy Client + NoSuchMethodError。对我来说很有意义,因为无论如何我宁愿我的休息服务器在当前的 jar 下运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多