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.xml
arquivo 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-RS
classes que eu gostaria de servir como um REST API
. Para este efeito, eu criei correspondente javax.ws.rs.core.Application
classes para fornecer esses componentes REST. Então eu estou incluindo as Application
classes no web.xml
arquivo. 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.xml
que 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.Servlet
e 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.
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 @ApplicationPath
valor especificado, ou "/resources"
se o anterior está faltando.