0

アプレットまたはスタンドアロン アプリとして使用できる単純なアプリケーションがあります。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 のマニフェストを無視する可能性があります)。 . 問題は、コードがアプレットから実行されている場合にのみ発生します。

誰でも私を助けることができますか?

4

1 に答える 1