Реализация REST на OSGi Jetty с использованием web.xml - PullRequest
0 голосов
/ 16 мая 2019

Попытка простой реализации 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! 
...