rest - Jersey REST get 返回 java.lang.NoSuchMethodError

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

我正在尝试从正在运行的 REST Web 服务获取响应。

我通过查看文档得出以下结论:

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 还是我遗漏了一些东西? 谢谢

最佳答案

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

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

关于rest - Jersey REST get 返回 java.lang.NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19903942/

相关文章:

java - RESTful Web 服务 - 资源上下文和响应问题

python - 从返回的元组或列表数据中打印 1 项

java - Jersey NoClassDefFoundError : org/objectweb/asm/ClassVisitor exception

java - 如何在没有管理器的情况下使用apache HttpClient?

linux - 具有两个 NIC 卡的 Glassfih 和 Apache 配置

rest - 在 Go 中将路由注册到中心对象

java - 从 mysql 数据库获取时出现空指针异常

java - 为什么我无法通过 JNDI 使用远程接口(interface)访问我的 EJB?

java - Glassfish 4部署错误

mysql - glassfish 4 & MySQL & JSTL