georgesq 19 de jan. de 2007
se for uma chamada web, vc tem condições no container de configurar o timeout da sua aplicação, daí vc aumenta.
mais seria interessante vc fzr um teste de stress, visto que o custo de trabalhar com DOM é alto.
veja se não é possível vc migrar de DOM para SAX, aí verás substanciais melhoras.
[s]
baiano
Claudia.pt 19 de jan. de 2007
Não estou a usar nenhum container…
O meu código é o seguinte:
public class matadouro extends Thread {
/**
* @param args
* @throws ParserConfigurationException
* @throws SAXException
* @throws RemoteException
*/
public static void main ( String [] args ) throws ParserConfigurationException , SAXException , RemoteException , InterruptedException {
// TODO Auto-generated method stub
// Parameters
String [] data = { null , null , null , null , null };
while ( true )
{
try {
URL url = new URL ( "http://matadourosbl.no-ip.info/matadouro/data.php" );
InputStream inputXML = url . openStream ();
//Declare variables
org . w3c . dom . Document document ;
javax . xml . parsers . DocumentBuilderFactory factory = javax . xml . parsers . DocumentBuilderFactory . newInstance ();
//Build document:
javax . xml . parsers . DocumentBuilder builder = factory . newDocumentBuilder ();
document = builder . parse ( inputXML );
//Generate the NodeList;
org . w3c . dom . NodeList nodeList = document . getElementsByTagName ( "data" );
for ( int i = 0 ; i < nodeList . getLength (); i ++ )
{
org . w3c . dom . Node curNode = nodeList . item ( i );
//Get value attribute:
org . w3c . dom . Element curElm = ( org . w3c . dom . Element ) nodeList . item ( i );
String curVal = curElm . getAttribute ( "value" );
Claudia.pt 18 de fev. de 2007
Ninguém me ajuda??
Continuo tento a excepção…
nbluis 18 de fev. de 2007
Veja: http://www.guj.com.br/posts/list/52822.java
Lá tem a indicação para trabalhar com requisições http.
Até mais…
Claudia.pt 19 de fev. de 2007
Oi nbluis!
Estive a ver o que me indicaste e também li o tutoria http://www.guj.com.br/java.tutorial.artigo.5.1.guj
Então fiquei com uma dúvida… O meu código:
...
URL url = new URL ( "http://matadourosbl.no-ip.info/matadouro/data.php" );
InputStream inputXML = url . openStream ();
...
Será que entre a 1ª linha e a 2ª linha preciso de alguma coisa do tipo:
HttpURLConnection connection = ( HttpURLConnection ) url .openConnection () ;
connection .setDoInput ( true ) ;
connection .setDoOutput ( false ) ;
connection .connect () ;
Espero tua resposta.
Obrigada!!
Cláudia
nbluis 21 de fev. de 2007
Oi Claudia, desculpe a demora…
Pode fazer da seguinte maneira…
URL url = new URL ( "http://matadourosbl.no-ip.info/matadouro/data.php" );
HttpURLConnection connection = ( HttpURLConnection ) url . openConnection ();
DataInputStream in = new DataInputStream ( url . openStream ());
while ( in . available () & gt 0 ) System . out . println ( in . readLine ());
Até mais …
Sami_Koivu 21 de fev. de 2007
Olá,
Deixa eu ver se eu entendi correto.
Esse seu código roda de tempos em tempos, conectando a esse URL e parseando os dados XML com DOM?
E normalmente isso funciona mas às vezes durante a noite dá essas exceções?
Se esse for o caso, não concordo muito com as sugestões dadas aqui. Parece mais provável que seu código tá bom, só que o serviço que você está usando não está disponível às vezes. Talvez o sistema for desligado durante um tempinho a noite para fazer backup, talvez às vezes ocorram problemas da rede, ou alguma coisa desse gênero.
[]s,
Sami
Claudia.pt 21 de fev. de 2007
É mesmo isso!
Uso uma thread que acorda de hora a hora, faz o parser do xml e guarda-os em DB.
Inicial/ tb pensei o mesmo que o Same, que fosse problema do servidor de dados, mas agora não estou mto convencida disso.
Tenho a certeza que o código funciona, mas ao fim de algum tempo a correr, obtenho a tal excepção e é despoletada pela linha:
InputStream inputXML = url.openStream();
Então li o tutorial aqui do GUJ, e vi que talvez falte a parte
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
Vou tentar, conforme sugeriu o nbluis, mas gostava de perceber qual a diferença entre colocar esta linha ou não???
Obrigada,
CLáudia
Claudia.pt 21 de fev. de 2007
Nbluis usei o teu código!!
Agora nem uma vez funcionou, obtenho logo excepção na 3ªlinha
java.net.ConnectException: Connection timed out: connect
DataInputStream in = new DataInputStream(url.openStream());
HELPPPPPP
nbluis 21 de fev. de 2007
Acredito que seja um problema de timeout to servidor web que tu estás requisitando.
Testa isso em outra url… tipo www.guj.com.br.
Caso seja isso, terás que tratar caso aconteça um timeout tu requisitar novamente até conseguir finalizar o processo…
Aguardo para qualquer necessidade…
Até mais…
Claudia.pt 24 de fev. de 2007
Luis real/ o problema deve ser do servidor web que estou requisitando. Com o url do guj não há timeouts!!!
Só mais uma coisa, podes me explicar a diferença entr os códigos:
URL url = new URL ( "http://www.guj.com.br" );
InputStream inputXML = url . openStream ();
OU
URL url = new URL ( "http://www.guj.com.br" );
HttpURLConnection connection = ( HttpURLConnection ) url . openConnection ();
DataInputStream in = new DataInputStream ( url . openStream ());
Pq não percebi sem criar a ligação http funciona, entao kal a diferença entre colocar esta linha ou não?!
Obrigada,
Cláudia