Bom dia,
Tenho uma aplicação flex que carrega um arquivo xml e mostra os dados na tela do navegador. Resumindo, tenho um html rodando em servidor tomcat, este chama a página flex que carrega o arquivo xml. O nome do arquivo é passado como parâmetro na URL.
ex.:[color=blue] http://localhost:8084/ti2010/SPERViewerWeb/SPEDViewerWeb.html?filename=SPERViewerWeb\AvalArq84693183000168-02-05-2010-14-43-50.xml[/color]
após eu chamar esta página através de link, é apresentado o erro #2032 rodando o tomcat pelo netbeans. Em outro servidor o oficial, é chamado em php e aparece o erro #2048, mas a situação é a mesma.
Alguém saberia o que acontece e como corrijo isto?
Obrigado.
Juceli,
Poderia mandar as mensagens destes erros e / ou o código.
Adiantando, por questões de segurança o Flash Player por default não consegue acessar arquivos q estejam em outro host. Se o teu xml estiver em outro endereço diferente de onde está o swf, pode dar erro de Security.
[]s
bom dia Fabiophx,
segue código principal.
Observação, quando rodo no flexbuilder, funciona perfeitamente. Porém quando rodo no firefox com servidor tomcat, ocorre o erro.
[code]<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=“http://www.adobe.com/2006/mxml” layout=“absolute” xmlns:ns1="*" creationComplete=“callLater(complete)”>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.managers.BrowserManager;
import mx.managers.IBrowserManager;
import mx.messaging.SubscriptionInfo;
private var loader:URLStream;
private var browserManager:IBrowserManager;
private function complete():void {
var filename:String;
browserManager = BrowserManager.getInstance();
browserManager.init();
filename = browserManager.url;
var tamanho:int = filename.length;
var indice:int = filename.indexOf("=",0) + 1;
var parametro:String = filename.substr(indice,int.MAX_VALUE).replace("#","");
if (parametro == null || parametro == "" || parametro == "null" || indice == 0) {
Alert.show("Não foi possivel ler os dados, verifique se o browser possui JavaScript habilitado ou se existe arquivo informado","Erro",4,parentApplication as Sprite);
return;
}
cursorManager.setBusyCursor();
loader = new URLStream();
loader.addEventListener(ProgressEvent.PROGRESS,progressHandler);
loader.addEventListener(Event.COMPLETE,loaderResultHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler)
var request:URLRequest = new URLRequest (parametro);
trace(browserManager.url);
trace(parametro);
try {
loader.load(request);
} catch (error:Error) {
Alert.show("Não foi possivel ler a URL, verifique se o browser possui JavaScrip habilitado");
cursorManager.removeBusyCursor();
}
}
private function progressHandler(evt:ProgressEvent):void {
progresso.text = "Lidos: " + evt.bytesLoaded.toString() + " de " + evt.bytesTotal.toString();
}
private function loaderResultHandler (event:Event):void
{
var ba:ByteArray = new ByteArray();
loader.readBytes(ba);
loader.close();
ba.uncompress();
main.sped = new XML(ba.toString());
cursorManager.removeBusyCursor();
progresso.text = "";
}
private function errorHandler(event:ErrorEvent):void {
Alert.show(event.text,"Erro ao carregar os dados");
}
]]>
</mx:Script>
<ns1:Main left="10" right="10" top="10" bottom="10" id="main">
</ns1:Main>
<mx:Text id="progresso" text="Lendo dados..." bottom="20" left="20"/>
</mx:Application>
[/code]
Juceli,
Como comentei se vc está acessando um recurso de outro servidor q não seja onde está o seu swf vc tera erro de segurança, coisa q não acontece qd está na IDE.
Para contornar isso vc terá q ter o crossdomain.xml no servidor de destino abaixo alguns links sobre isso:
http://blog.msdevstudio.net/2008/09/10/tutorial-crossdomainxml-nao-deixe-o-flex-complicar/
http://www.igorcosta.com/blog/?p=83
http://www.jamesward.com/2009/11/08/how-bad-crossdomain-policies-expose-protected-data-to-malicious-applications/
No caso acima vc tb pode solicitar para o seu server buscar esta informação para vc. Isto é, o teu Flex solicita para o teu server (PHP, JAVA, etc) e este pega a informação e te retorna.
Outra coisa vc pode usar tb o HttpService para fazer requisições http em vez do loader.
Qq coisa estamos aí
[]s
Como ficaria esta implmentação em HttpServer?
Juceli,
Mas o xml q vc está acessando é de outro domínio diferente daquele onde está o swf? Pq se for diferentes dará o mesmo erro de segurança independente de forma de comunicação.
[]s
Juceli,
Vc pode ver exemplos de HTTPService no Tour de Flex http://www.adobe.com/devnet-archive/flex/tourdeflex/web/#illustIndex=0;sampleId=12800;docIndex=0 > Flex Data Access > HTTPService.
[]s