Exception in thread "main" java.lang.NoClassDefFoundError: could not initialize class com.Sonne.jersey.core.header.MediaTypes
Ich versuche zu laufen, einen jersey-client und mit Blick auf dieses Problem.
WS-Klasse:
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();
}
}
Client-Klasse:
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();
}
}
}
Problem ist, wenn ich versuche, führen Sie die Client-Klasse, folgende Fehlermeldung kommt
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)
Ich bin mit den folgenden jar-Dateien:
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
- jersey-core benötigt wird, denke ich. Prüfen Sie, ob Sie MediaTypes-Klasse in diesem Glas.
- Sie haben die gleichen Fehler in der Server Konsole auch?
- Vielen Dank für die schnelle Antwort, naja ich bin mit jersey-core-1.18.jar enthält MediaTypes-Klasse. Aber dennoch zeigt dieser Ausnahme
- auch mein WS-Klasse bereitgestellt wird, tomcat, wo es keine Ausnahme, sondern die Client-Klasse bin ich die Ausführung als main-Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel würde man dieses problem, wenn dein code kompiliert jersey-bundle-1.8.jar und jsr311-api-0.9.jar. Aber hier kann ich sehen, Sie sind mit
jsr311-api-1.1.1.jar
. Dann das nächste problem wäre älter jar-Datei geladen worden wäre, von der Anwendung/web-server. Für zB: GlassFish 3.1 kommt mit jersy legalisiert 1.5( die möglicherweise vorrangig über Ihre Bibliotheken).Idealerweise würden Sie brauchen, um zu überprüfen, die version des JSR-311-Bibliothek geladen (0.9-version des jsr311-api-jar ist veraltet) auf dem server.
Und sollten Sie kompilieren vor jersey-bundle-1.8.jar und laufen mit jersey-bundle-1.8.jar und jsr311-api-1.1.1.jar
In meinem Fall war ich nicht ziehen in der jersey-Kern-Glas als runtime-Abhängigkeit. Sobald ich fügte hinzu, es schien zu funktionieren.
$mvn dependency:tree
) aber wenn es nicht die richtige version, dann ja, Sie müssen rufen und ausdrücklich die version, die Sie wollen.Für Anhänger, diese (mit mockito in diesem Beispiel, sondern eine Art generische):
gemeint "Sie haben eine Abhängigkeit von der jersey-Kern 1.0.2 und auch die Abhängigkeit von der jersey-client 1.11" (müssen match core mit client-Versionen stärker). Leider "server" und "client" verwenden, die den "Kern", so dass am Ende praktisch alle haben exakt bis 😐