Apache CXF で記述された使用可能な REST API (API Y など) のラッパー REST API (API X など) を作成しています。ラッパーには CXF Webclient を使用しています。これが、X から Y を呼び出す方法です。
@GET
@Path("{userName}")
public Response getUser(@PathParam("userName") String userName) {
try {
WebClient client
= WebClient.create("https://localhost:8080/um/services/um");
Response response = client.path("users/" + userName)
.accept(MediaType.APPLICATION_JSON)
.get();
User user = (User) response.getEntity();
return Response.ok(user).build();
} catch (Exception e) {
return handleResponse(ResponseStatus.FAILED, e);
}
}
ここでは、Y を X の依存関係として使用できないため、User クラスは Y から X にコピーされます。唯一の違いはパッケージ名です。リクエストを送信すると、 でクラス キャスト例外が発生しUser user = (User) response.getEntity();
ます。
java.lang.ClassCastException: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream cannot be cast to org.comp.rest.api.bean.User
クラスのパッケージ名が違うからでしょうか?
誰かが User オブジェクトへの応答を得るのを手伝ってくれませんか?