gpt4 book ai didi

java - Jersey 在部署为 JAR 时找不到资源,但可以在 Eclipse 中使用

转载 作者:行者123 更新时间:2023-12-01 04:38:53 25 4
gpt4 key购买 nike

我正在 Java 独立应用程序中嵌入 Grizzly 服务器。我正在使用 Jersey 通过 REST 调用来提供一些资源。虽然当我在 Eclipse 中运行/调试时这工作得很好,但当尝试使用 Export -> Runnable JAR 创建 JAR 时,我总是收到以下错误:

严重:ResourceConfig 实例不包含任何根资源类。

这是我启动 Grizzly 服务器的类:

/**
* 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 文件更相关,因此 Jersey 知道在哪里查找...我尝试了这里建议的内容: https://groups.google.com/d/msg/neo4j/0dNqGXvEbNg/xaNlRiU1cHMJ但似乎不起作用...

更新:我设法通过创建一个手工制作的 ANT 文件来解决这个问题,其中包含典型的任务:清理、构建、jar 等......我真的不能说我的 ANT 的具体要点是什么解决这个问题...但确实如此。您可以下载here如果您碰巧遇到同样的问题,请重用它,前提是您相应地更改它以适合您的项目。

最佳答案

如果没有 web.xml,很难说,但请检查以下内容:

Many reasons causing this “ResourceConfig” error message. Few solutions that I know:

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.

关于java - Jersey 在部署为 JAR 时找不到资源,但可以在 Eclipse 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com