おもちゃのアプリケーションをセットアップしようとしています(いつか実際のアプリケーションになる可能性があります)。ウィンクとジャクソンで問題が発生しています。2つのアプリケーションがあります。1つはjettyでwink-serverを実行し、JSONデータを正常に提供しているようです。1つはjettyでwink-clientを実行し、JSONデータを正常に受信します。問題は、JSONデータを自動的に逆シリアル化してJavaBeanに戻すことにあります。
ウィンククライアントアクションで使用するコードは次のとおりです。
RestClient client = new RestClient();
Resource resource = client.resource("http://localhost:8081/helloworld");
User user = resource.accept(MediaType.APPLICATION_JSON).get(User.class);
Strutsアクションを実行しようとしたときに受け取るエラーは次のとおりです。
java.lang.RuntimeException: No javax.ws.rs.ext.MessageBodyReader found for type class my.package.structure.User and media type application/json. Verify that all entity providers are correctly registered.
org.apache.wink.client.internal.handlers.ClientResponseImpl.readEntity(ClientResponseImpl.java:123)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:65)
org.apache.wink.client.internal.handlers.ClientResponseImpl.getEntity(ClientResponseImpl.java:52)
org.apache.wink.client.internal.ResourceImpl.invoke(ResourceImpl.java:186)
org.apache.wink.client.internal.ResourceImpl.get(ResourceImpl.java:294)
my.package.structure.action.HelloWorldAction.execute(HelloWorldAction.java:29)
...
最初のコードスニペットの最後の行を次の行に置き換えると、すべてが正常に機能し、ダンディになります。
String message = resource.accept(MediaType.APPLICATION_JSON).get(String.class);
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(message, User.class);
データが正常に処理されていることは明らかですが、問題は、JacksonJsonProviderクラスがWinkクライアントに登録されていないという事実にあるようです。プロバイダーをWinkサーバーに登録する方法はたくさんありますが、Winkクライアントは登録していません。
最初のコードスニペットを正しく動作させることは可能ですか?もしそうなら、どのように?
(余談ですが、もう1つの問題は、Userクラスに注釈がないことです。現在は注釈がありません。必要な場合があります...)