1

私は、Grizzly サーバーを Java スタンドアロン アプリ内に埋め込んでいます。私はジャージーを使用して、REST 呼び出しを使用していくつかのリソースを提供しています。これは、Eclipse で実行/デバッグしているときに完全に機能しますが、[エクスポート] -> [実行可能な JAR] を使用して JAR を作成しようとすると、常に次のエラーが発生します。

SEVERE: ResourceConfig インスタンスにルート リソース クラスが含まれていません。

Grizzly Server を起動するクラスは次のとおりです。

/**
 * Constructor
 */
public RestServer(){
    //set up default initParams
    initParams.put( "com.sun.jersey.config.property.packages", packageName);
    initParams.put( "com.sun.jersey.api.json.POJOMappingFeature", Boolean.toString(jsonParsing));
}

/**
 * Starts the Grizzly Server thread
 * @return  TRUE if start was correct
 */
public boolean startGrizzly(){
    if (grizzlyRunning){
        Logger.error(DEBUG_TAG, "Grizzly Server is already running");
        return false;
    }
    else{
        String hostString = host;
        String portString = Integer.toString(port);
        String server = "http://" + hostString + ":" + portString + "/";
        try {
            selector = GrizzlyWebContainerFactory.create( server, initParams );
            selector.setKeepAliveTimeoutInSeconds(-1);
            grizzlyRunning = true;
            return true;
        } 
        catch (IllegalArgumentException | IOException e) {
            Logger.error(DEBUG_TAG, "There was an error trying to start the Grizzly Server. Reason is " + e.getMessage());
            grizzlyRunning = false;
            return false;
        }
    }

}

/**
 * Stops the Grizzly Server thread
 * @return  TRUE if stop was correct
 */
public boolean stopGrizzly(){
    if (grizzlyRunning){
        selector.stopEndpoint();
        grizzlyRunning = false;
        return true;
    }
    else{
        Logger.error(DEBUG_TAG, "Grizzly is not running. Cannot stop it");
        return false;
    }
}

パッケージ名には、REST リソース (この場合は「com.mareculum.model」) を持つ他のクラスへのパスが含まれています。つまり、これはサービスを提供するクラスです。

package com.mareculum.model;

@Path("/json")
public class RestResources {

    /**
     * Debugging tag
     */
    private static final String DEBUG_TAG = "RestResources";


    /**
     * Gets the JSON collection of data from itsaseusbuoys 
     * @return The JSON array containing the data from itsaseus buoys 
     */
    @GET
    @Path("/get/itsaseus_data_raw")
    @Produces(MediaType.APPLICATION_JSON)
    public ItsaseusDataEntity [] getItsaseusDataRaw() {
        Vector<ItsaseusDataEntity> ret = getItsaseusBuoysData();
        if (ret != null){
            return (ItsaseusDataEntity[]) ret.toArray();
        }
        else{
            return null;
        }
    }


    /**
     * Gets the JSON collection of data from itsaseusbuoys 
     * @return The JSON array containing the data from itsaseus buoys 
     */
    @GET
    @Path("/get/itsaseus_fusion_table")
    @Produces(MediaType.APPLICATION_JSON)
    public ItsaseusFusionTableRow [] getItsaseusDataEntity() {
        ArrayList<ItsaseusFusionTableRow> data = getDataFromItsaseusTable(); 
        ItsaseusFusionTableRow [] retArray = new ItsaseusFusionTableRow[]{};
        if (data != null){
            retArray = data.toArray(new ItsaseusFusionTableRow[data.size()]);
            return retArray;
        }
        else{
            return null;
        }
    }   

    /**
     * Gets the JSON data from NOAA 
     * @return The JSON object containing data from NOAA buoy 
     */
    @GET
    @Path("/get/noaa_fusion_table")
    @Produces(MediaType.APPLICATION_JSON)
    public BuoyRSSData [] getNoaaDataEntity() {
        ArrayList<BuoyRSSData> data = getDataFromNoaaTable(); 
        BuoyRSSData [] retArray = new BuoyRSSData[]{};
        if (data != null){
                retArray = data.toArray(new BuoyRSSData[data.size()]);
                return retArray;
        }
        else{
            return null;
        }
    }
}

ご覧のとおり、ここでは特に複雑なことは何もありません。ジャージーがどこを見ればよいかを知っているように、JARファイルをパックする方法にもっと関連しているように見えます...私はここで提案されたことを試しまし :うまくいかないようです...

更新:クリーン、ビルド、ジャーなどの典型的なタスクで手作りのANTファイルを作成することで、これを修正することができました.ANTの特定のポイントがこの問題を修正しているとは言えません.. ここからダウンロードして、プロジェクトに合わせて変更すれば、同じ問題が発生した場合に再利用できます。

4

1 に答える 1

0

web.xml なしで言うのは難しいですが、次の点を確認してください。

この「ResourceConfig」エラー メッセージの原因はさまざまです。私が知っているいくつかの解決策:

com.sun.jersey.config.property.packages doesn’t exist in your web.xml.
com.sun.jersey.config.property.packages included a resource that doesn’t include any jersey services.
于 2013-06-05T11:24:05.640 に答える