Boa tarde, to com o seguinte problema:
Tenho uma consulta que faço em outro sistema e baseado no retorno faço umas validações. O problema é que funciona durante 1 ou 2 horas e depois acontece o seguinte erro:
java.io.IOException: Server returned HTTP response code: 400 for URL: “minha URL de consulta”
O problema é que funciona durante um tempo e depois para, daí tenho que reiniciar o tomcat para funcionar por mais 2 horas.
Segue o código usado para fazer a conexão:
public synchronized static Element getDocumentRootWithProxy(String url, String proxyHost, int proxyPort) throws MalformedURLException, DocumentException, IOException {
URL url_ = new URL("http",proxyHost,proxyPort,url);
SAXReader reader = new SAXReader();
HttpURLConnection httpURL = (HttpURLConnection)url_.openConnection();
httpURL.setConnectTimeout(10000);
logger.debug("Timeout para busca de XML:"+httpURL.getConnectTimeout());
httpURL.connect();
InputStream is = httpURL.getInputStream();
Document d = reader.read(is);
Element root = d.getRootElement();
httpURL.disconnect();
return root;
}
Andei pesquisando nos foruns, mas ninguém tem esse problema. O problema dos outros é “ou funciona ou não funicona” ninguém tem um caso desses intermitente.
Quando para o processo do tomcat o consumo de CPU e memória é alto?
Normal. O consumo que de recurso da máquina quando o tomcat é parado é o mesmo de quando ele é iniciado, ou seja, apos dar o start no tomcat ficou o consumo de X e na hora de parar ~2,5 horas depois é o mesmo X.
Iremos fazer um teste hoje sem passar pelo servidor de proxy, coloco o resultado assim que terminarmos.
Então pessoal, minha classe que faz a conexão já esta assim:
public Element getDocumentRoot(String url) throws MalformedURLException, DocumentException, IOException {
URL url_ = new URL(url);
SAXReader reader = new SAXReader();
HttpURLConnection httpURL = null;
Element root = null;
try{
// httpURL = (HttpURLConnection)url_.openConnection();
// httpURL.setConnectTimeout(10000);
// httpURL.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
// httpURL.setRequestProperty("Accept","*/*");
// logger.debug("Timeout para busca de XML:"+httpURL.getConnectTimeout());
// httpURL.connect();
System.out.println("URL (SEM PROXY): "+url.toString());
InputStream is = new URL(url).openStream();//httpURL.getInputStream();
Document d = reader.read(is);
//write(d);
is.close();
root = d.getRootElement();
}catch (MalformedURLException e) {
e.printStackTrace();
throw e;
}catch (IOException e) {
e.printStackTrace();
throw e;
}finally{
if(httpURL!= null)
httpURL.disconnect();
}
return root;
}
O que eu já fiz:
- Mudei o endereço externo da aplicação para o endereço interno
- Voltamos a versão do java do servidor
- Coloquei as duas aplicações no mesmo tomcat
fui fazendo 1 de cada vez e todos eles de pois de 2h ou 3 deu o mesmo problema.
Agora
- Parametrizei a URL do outro sistema para “localhost”
- Como podem ver, não uso mais a classe HttpURLConnection foi substituido pelo new URL(url).openStream();
E agora é esperar.