Это беспокоило меня в течение последних 2 дней. Моя проблема в том, что я разработал веб-сервис jax-rs, использующий встроенный причал, и это прекрасно работает как отдельный проект. Проблема возникает, когда я пытаюсь вызватьОсновной метод, который запускает сервер Jetty через отражение от другого кода.Я перепроверил, что нет никаких проблем загрузчика классов (очевидно, поскольку никакая ошибка не генерируется), но путь, по которому я обращаюсь к моему веб-сервису, возвращает 404, никаких ошибок не выдается. Я вижу из журналов, что сервер запускаетсяпросто отлично, но остальная конечная точка не ударилась или не была решена, или по какой-то причине 404. Также обратите внимание, что зависимые файлы jar для этого проекта, а также класс, содержащий метод main, загружаются через загрузчик классов url, созданный из URL-адресовисходные файлы и банки.Крайне нужна помощь
Код, запускающий сервер Jetty
public void startJettyServer () {
try {
/* code to enable logging in jetty */
StdErrLog logger = new StdErrLog();
logger.setLevel(1);
Log.setLog(logger);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
/*
* code to enable startup listeners StartupListener sup=new
* StartupListener(); context.addEventListener(sup);
*/
Server jettyServer = new Server(8080);
jettyServer.setHandler(context);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
//jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
//org.demonking.JettyServiceApp.class.getCanonicalName());
jerseyServlet.setInitParameter("jersey.config.server.provider.packages",
"org.demonking");
System.out.println("i am here");
jettyServer.start();
// jettyServer.join();
// jettyServer.stop();
} catch (Exception e) {
e.printStackTrace();
} finally {
// jettyServer.destroy();
}
}
код, вызывающий этот метод
public static void main(String[] args) throws ClassNotFoundException {
// TODO Auto-generated method stub
try
{
AppServer appServer = new AppServer();
appServer.startJettyServer();
System.out.println("exiting main");
} catch (Exception ex)
{
System.out.println("in exception in app class");
ex.printStackTrace();
}
}
Кодкоторый вызывает основной метод через отражение
List<URL> urlsR = new ArrayList<URL>();
//location of source files
File file = new File("C:\\Users\\DemonKing\\Documents\\eclipseprojects\\JettyDemo\\bin\\");
// convert the file to URL format
URL url = file.toURI().toURL();
urlsR.add(url);
//location of dependent jars
File file2 = new File("F:\\JettyJarsComplete");
for (File child : file2.listFiles()) {
File resFile = new File(file2 + "\\" + child.getName());
System.out.println(resFile);
URL url2 = resFile.toURI().toURL();
urlsR.add(url2);
}
URL[] urls = urlsR.toArray(new URL[urlsR.size()]);
// load this folder into Class loader
ClassLoader cl = new URLClassLoader(urls);
Class<?> cls = cl.loadClass("org.demonking.App");
Method m = cls.getDeclaredMethod("main", String[].class);
m.invoke(null, (Object) null);