アプレットまたはスタンドアロン アプリとして使用できる単純なアプリケーションがあります。REST サービスにリクエストを送信し、結果を表示しようとしますList<City>
。
都市クラスのコードは次のとおりです。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class City implements Serializable {
private Integer cityId;
private String name;
public Integer getCityId() {
return cityId;
}
public void setCityId(Integer cityId) {
this.cityId = cityId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
jersey-bundle-1.17 を使用してリクエストを送信し、レスポンスを取得します。
リクエストを送信してレスポンスを取得するコード:
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client c = Client.create(clientConfig);
List<City> result = c.resource(resource url here).get(new GenericType<java.util.List<City>>(){});
アプリをビルドした後、私は2つのjarファイルを持っています.MyJar.jarと私のアプリとjersey-bundle-1.17.jarです。jersey への Class-Path は、MyJar.jar のマニフェストで指定されます。
jar ファイルをスタンドアロン アプリ (java -jar MyJar.jar) として実行すると、すべて問題なく、要求が送信され、応答が受信され、List<City>
. アプレット(htmlページまたはアプレットビューアー)リクエストが送信されたときにjarファイルを実行すると、応答は受信されますが、List<City>
ことわざへの応答を逆シリアル化できません
A message body reader for Java class java.util.List, and Java type java.util.List<City>, and MIME media type application/json was not found
JacksonJsonProvider.class をジャージー プロバイダーのリストに追加しようとしました。String だけを City[] にデシリアライズしようとしました。アプレットから実行すると、適切なメッセージ本文リーダーが見つからないと常に表示されます。また、デスクトップ アプリケーションとして実行すると、すべて正常に動作します。
アプレットは、サーバーアクセスログに表示され、リクエストが送信されると、jersy-bundle jar を確実にロードしますが、正しくロードされていないように見えます (ロード中に jersey-bundle jar のマニフェストを無視する可能性があります)。 . 問題は、コードがアプレットから実行されている場合にのみ発生します。
誰でも私を助けることができますか?