私は小さな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>
ありがとうございます。すべてのクラスを再コンパイルして依存関係を変更しようとしていますが、まだ動作しません。最初の投稿を編集し、POSTメソッドのサンプルコードを追加します。 – atezor
@atezor「NoSuchMethodError」は実行時にのみ発生する「エラー」です。したがって、実行時に同じライブラリ(バージョンさえ)があることを確認する必要があります。 – Ravi