Я внедряю сервер Grizzly в автономное приложение Java. Я использую Джерси, чтобы обслуживать некоторые ресурсы, используя вызовы REST. Хотя это работает отлично, когда я запускаю/отлаживаю Eclipse при попытке создать JAR с помощью Export -> Runnable JAR, я получаю следующую ошибку:Джерси не может найти ресурсы при развертывании как JAR, но работает в Eclipse
SEVERE: экземпляр ResourceConfig не содержит никаких root классов ресурсов.
Вот мой класс, который запускает сервер 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 так Джерси знает, где искать ... Я попробовал то, что было предложено здесь: https://groups.google.com/d/msg/neo4j/0dNqGXvEbNg/xaNlRiU1cHMJ Но это не похоже на работу ...
UPDATE: Мне удалось это исправить, создав файл ANT с ручной работой с типичными задачами: clean, build, jar и т. Д. Я не могу сказать, какая конкретная точка моего ANT исправляет эту проблему ... но это так. Вы можете загрузить его here и повторно использовать его, если у вас такая же проблема, если вы измените его в соответствии с вашим проектом.
Привет, у меня нет файла web.xml, так как я встраивание гризли, не нужно. На самом деле, это идея встраивания сервера в автономное приложение Java, иначе я бы использовал Tomcat или подобное. Предлагаемые решения не работают, в основном потому, что они не будут работать в Eclipse, если там, где нет пакета с ресурсом вообще ... thx anyway – AlejandroVK
Я не понимаю, что именно вы собираетесь делать, но вы можете захотеть прочитайте это: http://www.vogella.com/articles/REST/article.html#restjersey, прежде чем продолжить. – sschrass
Привет, я уже прочитал этот учебник, который велик (как обычно, с Vogel), но я не хочу использовать Tomcat, Glassfish и т. Д. Специально, потому что я только обслуживаю несколько ресурсов. Таким образом, я интегрирую крошечный сервер REST с Grizzly, хотя Jetty также может быть использован для этого. Nevermind, мне удалось исправить это с помощью сделанного вручную ANT-файла (см. Обновленный вопрос) Спасибо за помощь в любом случае :) – AlejandroVK