Como corrigir 'não pode ser convertido para javax.servlet.Servlet' erro ao tentar empacotar RESTO App com Servlet

fila:

Eu estou tentando configurar Angular 7 com um projeto java back-end baseado maven em um único arquivo de guerra. No momento eu estou tentando configurar o web.xmlarquivo onde estou actualmente a ter este problema. Não tenho a certeza a todos, se a minha abordagem é válida ou 'bom' por isso vou primeiro descrever o que eu estou tentando fazer (se você pensar melhor sobre este aspecto, por favor, me correto).
Então, eu tenho um par de JAX-RSclasses que eu gostaria de servir como um REST API. Para este efeito, eu criei correspondente javax.ws.rs.core.Applicationclasses para fornecer esses componentes REST. Então eu estou incluindo as Applicationclasses no web.xmlarquivo. A seguir estão os arquivos:

web.xml

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <url-pattern>/rmz/*</url-pattern>
  </servlet-mapping>

Outra variação web.xmlque eu tentei

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>backend.backendservice.StammSolvaraJahrRestApplication</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <url-pattern>/rmz/*</url-pattern>
  </servlet-mapping>

classe de aplicativo

public class StammSolvaraJahrRestApplication extends Application {

  @Override
  public Set<Class<?>> getClasses() {
    Set<Class<?>> sets = new HashSet<>();
    sets.add(StammSolvaraJahrRest.class);
    return sets;
  }

}

O erro que eu recebo é: java.lang.ClassCastException: backend.backendservice.StammSolvaraJahrRestApplication cannot be cast to javax.servlet.Servlete se eu remover o <servlet-class>então eu vou ficar No servlet class has been specified for servlet. Estou seguindo https://docs.oracle.com/cd/E24329_01/web.1211/e24983/configure.htm#RESTF183 e Como implantar um aplicativo JAX-RS? entre outros, mas parece não estar a funcionar.

Emanuel Ramirez:

Há duas maneiras de definir o seu JAX-RS servlet.

1) com aplicação subclasse como o que você tem, você pode ignorar a configuração web.xml e apenas adicionar a anotação aplicativo

@ApplicationPath("resources")
public class StammSolvaraJahrRestApplication extends Application

2) Com web.xml configuração

<servlet>
    <display-name>JAX-RS Servlet</display-name>
    <servlet-name>package.hierarchy.StammSolvaraJahrRestApplication</servlet-name>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>package.hierarchy.StammSolvaraJahrRestApplication</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>JaxRSServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Se você pular o mapeamento do servlet do último, ele irá usar o seu o seu @ApplicationPathvalor especificado, ou "/resources"se o anterior está faltando.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=236605&siteId=1
Recomendado
Clasificación