9

我正在尝试运行一个球衣客户端并面临这个问题。

WS类:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

@Path("/hello")
public class HelloWorldService {

@GET
@Path("/vip")
@Produces(MediaType.APPLICATION_JSON)
public Response getMsg(@QueryParam("msg") String msg) {

    String output = "Jersey say : " + msg;

    return Response.status(200).entity(output).build();

}

}

客户端类:

    import com.sun.jersey.api.client.Client;
    import com.sun.jersey.api.client.ClientResponse;
    import com.sun.jersey.api.client.WebResource;

    public class JerseyClientGet {

        public static void main(String[] args) {
            try {

                Client client = Client.create();

                WebResource webResource = client
                        .resource("http://localhost:8080/TestRest/rest/hello/vip?msg=ABCD");

                ClientResponse response = webResource.accept("application/json")
                        .get(ClientResponse.class);

                if (response.getStatus() != 200) {
                    throw new RuntimeException("Failed : HTTP error code : "
                            + response.getStatus());
                }

                String output = response.getEntity(String.class);

                System.out.println("Output from Server .... \n");
                System.out.println(output);

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }

问题是当我尝试执行客户端类时,出现以下错误消息

            Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.sun.jersey.core.header.MediaTypes
                at com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:182)
                at com.sun.jersey.core.spi.factory.MessageBodyFactory.initReaders(MessageBodyFactory.java:176)
                at com.sun.jersey.core.spi.factory.MessageBodyFactory.init(MessageBodyFactory.java:162)
                at com.sun.jersey.api.client.Client.init(Client.java:342)
                at com.sun.jersey.api.client.Client.access$000(Client.java:118)
                at com.sun.jersey.api.client.Client$1.f(Client.java:191)
                at com.sun.jersey.api.client.Client$1.f(Client.java:187)
                at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
                at com.sun.jersey.api.client.Client.<init>(Client.java:187)
                at com.sun.jersey.api.client.Client.<init>(Client.java:159)
                at com.sun.jersey.api.client.Client.create(Client.java:669)
                at com.mkyong.client.JerseyClientGet.main(JerseyClientGet.java:12)

我正在使用以下罐子:

asm-3.1.jar、jackson-core-asl-1.9.2.jar、jackson-jaxrs-1.9.2.jar、jackson-mapper-asl-1.9.2.jar、jackson-xc-1.9.2.jar、 jersey-bundle-1.8.jar、jersey-client-1.18.jar、jersey-core-1.18.jar、jersey-json-1.18.jar、jersey-server-1.18.jar、jersey-servlet-1.18.jar、jettison- 1.1.jar,jsr311-api-1.1.1.jar

4

3 回答 3

10

通常,当您的代码针对 jersey-bundle-1.8.jar 和 jsr311-api-0.9.jar 编译时,您会遇到此问题。但在这里我可以看到你正在使用jsr311-api-1.1.1.jar. 然后下一个问题将是应用程序/Web 服务器已加载较旧的 jar 文件。例如:GlassFish 3.1 带有 Jersy 1.5(它可能优先于您的库)。

理想情况下,您需要检查服务器中是否加载了 JSR-311 库的版本(jsr311-api jar 的 0.9 版本已过时)。您应该针对 jersey-bundle-1.8.jar 进行编译,并使用 jersey-bundle-1.8.jar 和 jsr311-api-1.1.1.jar 运行

于 2013-12-10T06:47:58.423 回答
2

就我而言,我没有将 jersey-core jar 作为运行时依赖项。一旦我添加它似乎工作正常。

于 2015-05-13T14:53:30.850 回答
0

For followers, these (with mockito in this instance, but kind of generic):

java.lang.NoClassDefFoundError: com/sun/jersey/spi/inject/Errors$Closure

java.lang.NoClassDefFoundError: com/sun/jersey/core/header/LinkHeaders

meant "you have a dependency on jersey-core 1.0.2 and also dependency on jersey-client 1.11" (need to match core with client versions more closely). Unfortunately "server" and "client" both use the "core" so in the end they practically all have to precisely match up :|

于 2016-11-08T21:37:00.970 回答