2017-12-22 13 views
0

Ich erstelle eine kleine REST API und ich habe ein Problem mit POST-Methode, wo verbrauchen und produzieren MediaType.APPLICATION_JSON. Wenn ich POST-Server (Glassfish 4.1.1) senden gibt den Statuscode 500 Internal Server Error sowie die folgenden Fehler:Java Jersey REST NoSuchMethodError: XMLUnmarshaller

java.lang.NoSuchMethodError: org.eclipse.persistence.oxm.XMLUnmarshaller.setNamespaceResolver(Lorg/eclipse/persistence/oxm/NamespaceResolver;)V 

las ich diese post und änderte die Version org.eclipse.persistance.moxy. Es löst mein Problem nicht.

Ich verwende Maven und meine Abhängigkeit sieht tatsächlich wie folgt aus:

<dependencies> 
    <dependency> 
     <groupId>org.eclipse.persistence</groupId> 
     <artifactId>eclipselink</artifactId> 
     <version>2.5.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.26</version> 
    </dependency> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-moxy</artifactId> 
     <version>2.16</version> 
    </dependency> 
</dependencies> 

Bitte helfen Sie mir dieses Problem zu lösen.

Bearbeiten. Es ist Beispielcode von POST-Methode:

import java.net.URI; 
import java.util.List; 
import java.util.concurrent.ExecutorService; 
import javax.validation.Valid; 
import javax.ws.rs.BeanParam; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.container.AsyncResponse; 
import javax.ws.rs.container.Suspended; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.GenericEntity; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.UriInfo; 

@Path("/adverts") 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
public class AdvertsResources { 

@POST 
public void addAdvert(@Suspended final AsyncResponse asyncResponse, 
         @Valid final Advert advert, 
         @Context final UriInfo uriInfo) { 
    executorService.submit(new Runnable() { 
     @Override 
     public void run() { 
      asyncResponse.resume(doAddAdvert(advert, uriInfo)); 
     } 
    }); 
} 

private Response doAddAdvert(@Valid Advert advert, 
          @Context UriInfo uriInfo) { 
    Advert newAdvert = advertService.addAdvert(advert); 
    String newId = String.valueOf(newAdvert.getId()); 
    URI newUri = uriInfo.getAbsolutePathBuilder().path(newId).build(); 

    return Response.created(newUri) 
      .entity(newAdvert) 
      .build(); 
} 
} 

@EDIT

Hallo,

ich mein Problem mit JSON und POST-Methode lösen. Was ich mache:

1) Veränderung Glassfish 4.1.1 auf Glassfish 4,1

2) In Abhängigkeit

<dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-json</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-binding</artifactId> 
     <version>2.26</version> 
    </dependency> 

Antwort

0

ohne Code und komplette Stapel zu suchen, ist es sehr schwierig ist, das Problem zu lokalisieren, aber die Ursache für NoSuchMethodError ist höchstwahrscheinlich eine Klasse gegen eine andere Version der Klasse kompiliert, die eine Methode fehlt, als die, die Sie bei der Ausführung verwenden.

Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.

So überprüfen Sie die Liste der Bibliotheken und deren Versionen (speziell eclipselink), während Kompilierung und entfalteten Server.

+0

Danke für den Kommentar. Ich versuche, alle Klassen neu zu kompilieren und Abhängigkeit zu ändern, aber es funktioniert immer noch nicht. Ich bearbeite meinen ersten Beitrag und füge einen Beispielcode der POST-Methode hinzu. – atezor

+0

@atezor Bitte beachten Sie, 'NoSuchMethodError' ist ein 'Fehler', was bedeutet, dass es nur zur Laufzeit auftritt. Sie müssen also sicherstellen, dass Sie zur Laufzeit dieselbe Bibliothek (sogar deren Version) haben. – Ravi

Verwandte Themen