Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Aplicação leilões em Ant/Jetty - Erro 500 : NoSuchMethodError

Bom dia,

A execução da aplicação em Ant/Jetty não funcionou. Verifiquei no forum, não encontrado solução. Achei respostas para alterar o build path, mas o que exatamente é preciso fazer?

Erro ao carregar a página:

HTTP ERROR: 500
javax.servlet.http.HttpServletResponse.setCharacterEncoding(Ljava/lang/String;)V
RequestURI=/usuarios

Caused by:
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.setCharacterEncoding(Ljava/lang/String;)V
    at br.com.caelum.vraptor.http.WebXmlEncodingHandler.setEncoding(WebXmlEncodingHandler.java:43)
    at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
    at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522)

Tentei atualizar a versão do Ivy, tentado atualizar a versão do Jetty que está deprecated. O projeto usa versão 6.1.4 (2006-2010), porém até versão 8 (2009-2014) está deprecated. Ao utilizar versão 9 do Jetty, ocorre outros problemas no projeto

(...)\leiloes\build.xml:97: Problem: failed to create task or type jetty
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.

Precisam atualizar este projeto, colocando qualquer coisa mais nova (maven, gradle) ou até mesmo colocar em uma imagem em docker para não termos problemas de dependências para rodar a aplicação para iniciar o curso.

5 respostas

Olá, Gisiona!

Aqui funcionou certinho...

Minhas versões são:

alexandre ~ $ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
alexandre ~ $ ant -version
Apache Ant(TM) version 1.9.7 compiled on April 9 2016

Ao acessar a URL

http://localhost:8080/usuarios?_format=xml

obtive o seguinte XML:


<list>
  <usuario>
    <id>1</id>
    <nome>Mauricio Aniche</nome>
    <email>mauricio.aniche@caelum.com.br</email>
  </usuario>
  <usuario>
    <id>2</id>
    <nome>Guilherme Silveira</nome>
    <email>guilherme.silveira@caelum.com.br</email>
  </usuario>
</list>

Boa noite, Anderson.

Minhas versões são:

λ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

λ ant -version
Apache Ant(TM) version 1.10.5 compiled on July 10 2018

SO: Windows 10 Home

Ao acessar a URL exibe a mensagem postada.

Você só descompactou o projeto e executou, mantendo exatamente todas as versões das dependências?

Será que há alguma outra dependência fora o Java, Ant e as dependências do Projeto?

Obrigado.

Att,

Gisiona,

O erro NoSuchMethodError acontece quando um método não foi encontrado. O método não encontrado foi o HttpServletResponse.setCharacterEncoding.

O estranho é que esse método foi inserido no Java EE 1.4, de 2003, na especificação Servlet 2.4.

No leiloes-ws.zip, na pasta lib, há o JAR da versão 2.5 da API de Servlets.

Talvez haja alguma outra versão desse JAR na sua JRE que está tendo precedência.

Dê uma olhada no diretório de instalação do seu Java. Há algum servlet.jar no lib ou lib/ext?

solução!

Ah, vale seguir as dicas da Suely nesse tópico do fórum:

https://cursos.alura.com.br/forum/topico-erro-no-build-da-webapp-leiloes-51489

Resumindo, a solução encontrada na máquina com sistema operacional Windows 10, 64 bits:

1 - Instalar o Java JDK versão 1.8.0_152 ou 1.8.0_161

2 - Definir a variável de ambiente JAVA_HOME

3 - Instalar o Ant na versão 1.10.2

4 - Definir a variável de ambiente ANT_HOME

5 - Atualizar a variável de ambiente PATH acrescentando %JAVA_HOME%\bin; %ANT_HOME%\bin.

Alexandre, bom dia

Muito obrigado pelo retorno.

O problema realmente era com a versão do Ant, não funciona na última versão 1.10.5

Baixei a versão 1.10.2 e funcionou!

A versão do Java parece não influenciar, desde que seja a versão 8, pois o 9 é incompatível.

λ ant -version
Apache Ant(TM) version 1.10.2 compiled on February 3 2018

Para quem tiver este problema de Erro 500 : NoSuchMethodError no Windows, basta usar esta versão do Ant.