Попытка простой реализации REST на OSGi Jetty с использованием web.xml
Ниже в репозитории содержится код, который я пытался: https://github.com/pkolanda/my-learning-osgi-simple-rest-with-jetty, чтобы запустить код, mvn clean установить и запустить run.shСценарий оболочки в папке target / my-learning-osgi-simple-rest-with-jetty-0.1.
Для запуска кода, git close и mvn clean install .. в папке traget есть команда run.sh просто запустите этот скрипт.
Я попытался найти проблему, связанную с конфигурацией.Я не мог точно сообщить об ошибке с этой проблемой.
Ниже приведены подробности моей реализации:
Файл ресурса:
@Path("jsonstatus")
public class JsonResource {
private static Logger logger = LoggerFactory.getLogger(JsonResource.class);
@GET
@Produces("application/json")
public String listConferences() {
logger.info("Returning the status");
return "{\"status\": \"success\"}";
}
}
Реализация приложения:
public class JerseyApplication extends Application {
private static Logger logger = LoggerFactory.getLogger(JerseyApplication.class.getName());
@Override
public Set<Class<?>> getClasses() {
logger.info("--Returning all the claess-");
Set<Class<?>> result = new HashSet<Class<?>>();
result.add(JsonResource.class);
result.add(StatusResource.class);
return result;
}
}
web.xml:
<servlet>
<servlet-name>JAXRSEx</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>my.learnings.osgi.rest.jetty.activator.JerseyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAXRSEx</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Добавлены все ядра OSGi, консоли и джеты: Когда я запускаю Equinox, я получаю следующую ошибку.У меня нет связанного с пакетом активатора, и я развернул его с помощью web.xml
. Он работает с простым активатором:
@Override
public void start(BundleContext context) throws Exception {
logger.info("Starting the bundle");
ServletContextHandler ch = new ServletContextHandler();
ch.setContextPath("/");
ServletHolder holder = new ServletHolder(new ServletContainer());
holder.setInitParameter("javax.ws.rs.Application", JerseyApplication.class.getName());
ch.addServlet(holder, "/*");
context.registerService(ContextHandler.class.getName(), ch, null);
}
Я ожидаю, что jar приложения будет развернут без ошибок.
Ниже приведена ошибка, которую я получаю:
05:59:46.779 [Start Level: Equinox Container: 82edcca2-ba11-4354-8c49-96dd914910fc] WARN o.eclipse.jetty.webapp.WebAppContext - Failed startup of context o.e.j.w.WebAppContext@70993f30{/controller/nb/v2/monitor,file:///tmp/jetty-0.0.0.0-8081-my-learning-osgi-simple-rest-with-jetty-1.0-SNAPSHOT.jar-_controller_nb_v2_monitor-any-1013570667046445682.dir/webapp/,UNAVAILABLE}{file:/home/ndb/dev/my-learning-osgi-simple-rest-with-jetty/target/my-learning-osgi-simple-rest-with-jetty-0.1/plugins/my-learning-osgi-simple-rest-with-jetty-1.0-SNAPSHOT.jar}
java.lang.IllegalArgumentException: null
at org.objectweb.asm.ClassVisitor.<init>(Unknown Source)
at org.objectweb.asm.ClassVisitor.<init>(Unknown Source)
at org.eclipse.jetty.annotations.AnnotationParser$MyClassVisitor.<init>(AnnotationParser.java:476)
at org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:935)
at org.eclipse.jetty.osgi.annotations.AnnotationParser.parse(AnnotationParser.java:217)
at org.eclipse.jetty.osgi.annotations.AnnotationConfiguration$BundleParserTask.call(AnnotationConfiguration.java:66)
at org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:471)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
at java.lang.Thread.run(Thread.java:748)
____________________________
Welcome to Apache Felix Gogo
g!