Dai, ele irá me retornar o posicionamentos dos veículos rastreados, em um arquivo compactado que o conteúdo é um XML com o posicionamento dos veículos
Como fazer para solicitar tal arquivos e depois ler e descompactar tal retorno ??
A ideia é salvar isso em um arquivo XML/TXT para ler em outra liguagem e apresentar os dados.
Desculpe, a “leiguice”, mas tentei esboçar a necessidade !
Primeiro, qual o tipo de WS estamos falando? SOAP? REST?
Segundo, se você vai usar outra linguagem para apresentar os dados, sugiro nem mexer com java nessa camada. Não conheço nenhuma linguagem que não suporte, mesmo que de modo arcaico, SOPA e REST.
F
FabianoFFSoft
Acredito que seja REST, pois não tem nenhuma referência a SOAP!
Com relação a usar o JAVA para resolver a questão, meu problema esta na descompactação do retorno, que não tenho ou pelo menos até agora não descobri como fazer…vou colocar aqui um exemplo de código que me forneceram, mas é em C#: vejam
Aqui é a requisição:
privatestaticHttpWebRequestCreateRequest(){HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create("http://webservice.onixsat.com.br");request.Method="POST";request.ContentType="text/xml";returnrequest;}publicstaticstringRequestXml(stringstrRequest){stringresult=string.Empty;try{// requisição xml em bytesbyte[]sendData=UTF8Encoding.UTF8.GetBytes(strRequest);// cria requisicaoHttpWebRequestrequest=CreateRequest();StreamrequestStream=request.GetRequestStream();// envia requisiçãorequestStream.Write(sendData,0,sendData.Length);requestStream.Flush();requestStream.Dispose();// captura respostaHttpWebResponseresponse=(HttpWebResponse)request.GetResponse();StreamresponseStream=response.GetResponseStream();MemoryStreamoutput=newMemoryStream();byte[]buffer=newbyte[256];intbyteReceived=-1;do{byteReceived=responseStream.Read(buffer,0,buffer.Length);output.Write(buffer,0,byteReceived);}while(byteReceived>0);responseStream.Dispose();response.Close();buffer=output.ToArray();output.Dispose();// transforma resposta em string para leitura xmlresult=UTF8Encoding.UTF8.GetString(buffer);}catch(Exceptionex){// tratar exceção }returnresult;}
E essa seria a descompactação do retorno:
publicoverridebyte[]Decompress(byte[]data){if(IsValidDecompress(data)){try{// nome arquivostringnameDirectory=Guid.NewGuid().ToString();// cria diretorio na pasta tempDirectoryInfodInfo=Directory.CreateDirectory(Path.GetTempPath()+nameDirectory);// path arquivo zipstringpathFileZip=dInfo.FullName+Path.DirectorySeparatorChar+nameDirectory+".zip";// CREATE FILE ZIPFile.WriteAllBytes(pathFileZip,data);// DECOMPRESSFastZipfastZip=newFastZip();fastZip.ExtractZip(pathFileZip,dInfo.FullName,"");// nome do arquivo txt salvostringnameFileTxt=Directory.GetFiles(dInfo.FullName,"*.txt")[0];// arquivo descompactado em bytesbyte[]buffer=File.ReadAllBytes(nameFileTxt);// exclui diretorio e arquivos da pasta tempif(Directory.Exists(dInfo.FullName))Directory.Delete(dInfo.FullName,true);returnbuffer;}catch(Exceptionex){thrownewZipLibraryException("Falha ao descompactar arquivo no formato .zip",ex);}}returnnull;}
darlan_machado
Mas você vai implementar o que, além dos client? E em qual(is) linguagem(ns)?
F
FabianoFFSoft
Veja, preciso apenas do retorno do WS, eu passo um XML de requisição e ele me retorna o posicionamento dos veículos, até ai tudo blz, dai depois eu vou ler esse retorno. O que acontece é que o retorno que tenho obtido, segundo o fabricante, tem que montar o arquivo zip e depois descompactar e dai eu teria o XML com os dados do rastreamento.
Veja que fiz a requisição em JAVA e esta funcionando (aparentemente), meu problema é o conteúdo desse retorno
Veja a requisição em JAVA:
publicclassPrincipal{publicstaticvoidmain(String[]args){if(args.length>0){if(args[0].equals("rastreamento")){Stringp_xml=args[1];Stringp_url=args[2];HttpURLConnectionconnection=null;// Cria conexãotry{URLurl=newURL(p_url);connection=(HttpURLConnection)url.openConnection();connection.setRequestMethod("POST");connection.setRequestProperty("Content-Type","text/xml");connection.setRequestProperty("Content-Length",Integer.toString(p_xml.getBytes().length));connection.setRequestProperty("Content-Language","UTF8");connection.setUseCaches(false);connection.setDoOutput(true);//Envia requisicaotry(DataOutputStreamwr=newDataOutputStream(connection.getOutputStream())){wr.writeBytes(p_xml);//Pega a respostaInputStreamis=connection.getInputStream();try(BufferedReaderrd=newBufferedReader(newInputStreamReader(is))){StringBuilderresponse=newStringBuilder();// or StringBuffer if Java version 5+Stringline;Stringresult="";while((line=rd.readLine())!=null){result+=response.append(line);}System.out.println(result);}}}catch(IOExceptione){InfoMsg.mensagem("Erro no acesso ao WS! \n\n"+e.getMessage(),"Erro...","ERRO");}finally{if(connection!=null){connection.disconnect();}}}return;}}
darlan_machado
Veja, cada linguagem possui suas particularidades quanto ao recebimento. A questão é: qual linguagem você vai usar.
Como te disse, usar java vai adicionar uma complexidade desnecessária.
A não ser que você vá trabalhar com java. Caso contrário, não tem razão de usar java.
F
FabianoFFSoft
Uso HARBOUR, que acredito não tenha a questão da “descompactação” desse retorno, mas sempre utilizo JAVA quando a linguagem em questão não me atende, o que faço, por exemplo, não tinha como concatenar vários arquivos PDF em um só…usei recursos do JAVA e resolveu, ou seja, executo uma linha de comando do JAVA passando parâmetros e executo as funções conforme minha necessidade, a questão da requisição ao WS por exemplo, em HARBOUR blz, foi tranquilo, mas retorna o que ja relatei e “aparentemente” não tenho o recurso para resolver em HARBOUR, então recorro ao JAVA, para tentar solução, que acredito que deva ser uma coisa mais simples de se resolver.
darlan_machado
Cara, se o que o WS retorna é um arquivo compactado, então, sim, tem essa questão. Assim como você teria que serializar caso fosse um xml ou um json ou outro formato. Ou teria que gravar no file system caso fosse um arquivo cuja extensão não pode ser interpretada nativamente pela linguagem, como um cab, um pdf e etc.
De qualquer maneira, oque você precisa fazer é dar uma olhada em como tratar isso.