Зарегистрируйте сервлет Olingo без web.xml - PullRequest
0 голосов
/ 26 июня 2018

Можно ли использовать аннотацию @WebServlet с Olingo ? Я хочу избежать создания записей в нашем web.xml:

<servlet>
    <servlet-name>CarServiceServlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>org.apache.olingo.odata2.core.rest.app.ODataApplication</param-value>
    </init-param>
    <init-param>
        <param-name>org.apache.olingo.odata2.service.factory</param-name>
        <param-value>com.sample.CarServiceFactory</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>CarServiceServlet</servlet-name>
    <url-pattern>/CarService.svc/*</url-pattern>
</servlet-mapping>

Код взят из репозитория olingo-sample. Возможно, существует способ, подобный @WebInitParams для создания параметров инициализации, но что я должен аннотировать - class X extends ODataServiceFactory? Работает ли оно в целом?

РЕДАКТИРОВАТЬ: я использую Olingo V2 и Tomcat 8.

1 Ответ

0 голосов
/ 29 июня 2018

Конечно, вы можете сделать это с аннотацией.Вам нужно будет создать класс, который начинается с CXFNonSpringJaxrsServlet и передавать параметры инициализации в аннотации @WebServlet.

Ниже приведен код, который копирует ваш web.xml.

package com.sample;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author Shiva Saxena
 *
 */
@WebServlet(name = "CarServiceServlet", value = "/CarService.svc/*", initParams = {
    @WebInitParam(name = "javax.ws.rs.Application", value = "org.apache.olingo.odata2.core.rest.app.ODataApplication"),
    @WebInitParam(name = "org.apache.olingo.odata2.service.factory", value = "com.sample.CarServiceFactory") })
public class MyServlet extends CXFNonSpringJaxrsServlet {

    Logger logger = LoggerFactory.getLogger(MyServlet.class);

    private static final long serialVersionUID = -5663461069269732798L;

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

        // It is not necessory to override this function.Its here just for logging and better understanding 
        logger.info("Call intercepted by:" + this.getClass().getName());
        super.service(req, res);
    }

}
...