tenho uma aplicação desktop que necessitei passá-la para Applet. Rodou direitinho, exceto quando chego na part5e de gerar relatórios. Quando clico no botão que me gera o relatório dá o seuinte erro:
java.security.AccessControlException: access denied (java.io.FilePermission .\Relatorios\Protocolo2.jasper read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:73)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
at Imprime.actionPerformed(Imprime.java:69)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
tentei editar o arquivo .policy dessa forma:
/* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
/* DO NOT EDIT */
grant {
permission java.security.AllPermission;
permission java.io.FilePermission.AllPermission;
};
mas não deu certo…tb tentei assinar a applet…não deu certo
alguém poderia me ajudar a solucionar isso? qualquer idéia é bem-vinda!!!
Onde fica o arquivo .\Relatorios\Protocolo2.jasper? Tá no jar? Tá no site? Tá instalado na máquina do cliente? No seu código está acessando o arquivo assim mesmo (.\Relatorios\Protocolo2.jasper)?
Para testar um applet (e para a gente entender melhor por que não funciona), não use o termo “minha máquina”, pois não sei se você está falando do servidor ou do cliente. O ideal é sempre enviar os .jasper dentro do próprio .jar.
Faça o seguinte:
:arrow: Coloque os .jasper no jar (crie a pasta Relatorios na raiz do jar e coloque os .jasper nele).
:arrow: Para acessar os .jasper use o caminho /Relatorios/blabla.jasper. Lembre-se que é case sensitive e é para usar a “/” e não a “” e não precisa do ". " no inicio.
:arrow: Se você está gerando o .jar pelo Eclipse, certifique-se se foi tudo gerado corretamente (abra o jar e veja se os .jasper estão lá).
:arrow: Assine este .jar e todos os outros que voê usa com este applet.
Tinha um post aqui no GUJ falando sobre um bug de assinar jars se eles já tinham sido assinados anteriormente. Falava para retirar os arquivos de assinatura do arquivo e assinar de novo. Apagar o jar, gerar de novo e assinar também deve funcionar.
Acho que um applet nao pode acessar arquivos no cliente. Por Seguranca do Java.
java.security.AccessControlException: access denied (java.io.FilePermission .\Relatorios\Protocolo2.jasper read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)
…
Cara eu acho que nao pode,
mas deve ter uma forma bem Complexa para fazer isso.
[size=18][u][b] JAVA NAO TEM LIMITE[/b][/u][/size]
A tal “forma complexa” é assinando o código.
Mas você não colocou os seus .jasper no seu jar? Se colocou, você não está mais acessando o file system da máquina cliente. Poste o stacktrace do erro quando voce envia o seu .jasper dentro do jar. E se possivel poste o seu .jar e a sua pagina html/jsp que chama o codigo.
java.security.AccessControlException: access denied (java.io.FilePermission Relatorios\Protocolo2.jasper read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at java.io.File.exists(Unknown Source)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:73)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515)
at Imprime.actionPerformed(Imprime.java:69)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
[quote=evandrosantos]tb tentei assinar a applet…não deu certo
[/quote]
a) Você precisa limpar sempre as applets do cache do browser. Esse cache não é limpo só com Ctrl+F5; você precisa ir ao Painel de Controle, e escolher Java (ou Java Plug-In), e ver onde é que se limpa o cache.
b) Você tem de assinar não só a sua applet, como os JARs que sua applet usa. E se a applet já estiver assinada, você precisa “limpar a assinatura” antes, conforme foi dito antes.
c) Relatórios não são muito bons para serem criados com applets (por conta desses problemas chatos); deveriam ser criados no servidor e baixados.
[quote]
a) Você precisa limpar sempre as applets do cache do browser. Esse cache não é limpo só com Ctrl+F5; você precisa ir ao Painel de Controle, e escolher Java (ou Java Plug-In), e ver onde é que se limpa o cache.
b) Você tem de assinar não só a sua applet, como os JARs que sua applet usa. E se a applet já estiver assinada, você precisa “limpar a assinatura” antes, conforme foi dito antes.
c) Relatórios não são muito bons para serem criados com applets (por conta desses problemas chatos); deveriam ser criados no servidor e baixados. [/quote]
fiz o que vc disse…limpei o cache e tals…mas o erro persiste.
como assim vc diz que o relatórios “deveria ser baixados do servidor”? vc poderia me dar uma luz de como eu posso fazer isso? talvez seja uma solução paralela para meu problema…
voce conseguiu resolver esse problema do acesso ao relatorio .jasper …
pois estou querendo fazer a mesma coisa e até agora nao consegui, da o mesmo erro que voce falou …