2017-12-22 20 views
0

私は小さなREST APIを作成します。私はPOSTメソッドに問題があります。ここでは、消費し、MediaType.APPLICATION_JSONを生成します。私は、POSTサーバー(GlassFishの4.1.1)を送信すると、ステータスコード500内部サーバーエラーだけでなく、次のエラーが返されます。Java Jersey REST NoSuchMethodError:XMLUnmarshaller

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

私はこのpostを読み、バージョンorg.eclipse.persistance.moxyを変更しました。私の問題は解決しません。

私はMavenを使用して、私の依存性は、実際に次のようになります。

<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> 

私はこの問題を解決する助けてください。

編集。私はJSONとPOSTメソッドで私の問題を解決する

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

こんにちは、

: それはPOSTメソッドのサンプルコードです。私は何をすべきか:GlassFishの4.1

2に

1)変更のGlassFish 4.1.1)コードと完全なスタックを見ずに依存

<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> 

答えて

0

を追加し、問題を特定することは非常に困難ですNoSuchMethodError の根本的な原因は、実行中に使用しているものよりも、メソッドが欠落しているクラスの別のバージョンに対してクラスをコンパイルしている可能性があります。

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.

ので、ライブラリとコンパイルしばらくそのバージョン(特別eclipselink)のリストを確認し、展開サーバーで。

+0

ありがとうございます。すべてのクラスを再コンパイルして依存関係を変更しようとしていますが、まだ動作しません。最初の投稿を編集し、POSTメソッドのサンプルコードを追加します。 – atezor

+0

@atezor「NoSuchMethodError」は実行時にのみ発生する「エラー」です。したがって、実行時に同じライブラリ(バージョンさえ)があることを確認する必要があります。 – Ravi

関連する問題