Manipular arquivos com JWS

5 respostas
N

Galera, tenho uma aplicação que tem alguns arquivos .txt de configuração.
Quando tento ler um arquivo utilizando este trecho de código tradicional para manipular arquivos

try {
        BufferedReader in = new BufferedReader(new FileReader("LendoDoArquivo.txt"));
        String str;
        while ((str = in.readLine()) != null) {
            strRet+= str;
        }
        in.close();
    } catch (IOException e) {
    }

ele me da o seguinte erro:
java.security.AccessControlException: access denied (java.io.FilePermission LendoDoArquivo.txt read)

E quando tento utilizando o jar do jnlp

FileOpenService fos; 

    try { 
    	System.out.println(ServiceManager.getServiceNames());
        fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
//	    	fos = (FileOpenService)ServiceManager.lookup("");

} catch (UnavailableServiceException e) {

logger.error(e);

fos = null;

}

ele dar este erro:
ERROR - javax.jnlp.UnavailableServiceException: uninitialized

Só para constar o arquivo LendoDoArquivo.txt está dentro do jar principal da aplicação. Com a primeira maneira de leitura, localmente eu consigo ler, mas quando exporto a aplicação para utilizar com Java Web Start ele da aquele erro. E com a segunda opção nem localmente ele roda, o ServiceManager não traz nem os ServiceName, e por isso não consegue exergar javax.jnlp.FileOpenService.

Ja procurei bastante na web, mas o material sobre JWS é precário.

Alguem pode me ajudar?

5 Respostas

Marcelo_FS

Pra usar a primeira forma, vc tem que assinar seus .jar…

A segunda forma não vai funcionar localmente mesmo (imagino que você queira se referir a rodar via console ou via IDE), mas se você fizer um deploy no servidor e baixar via JWS ele não funciona também?

N

Ola.

Meus .jar (log4j,classes12.jar) já foram assinados com os seguintes comandos:

keytool -genkey -dname “cn=Teste, ou=Tecnologia o=B, l=F, s=C” -alias key -keystore c:\temp\mykeystore -storepass 123456 -validity 450
jarsigner -keystore c:\temp\mykeystore -storepass 123456 -signedjar as.jar log4j.jar key
jarsigner -keystore c:\temp\mykeystore -storepass 123456 -signedjar as.jar classes12.jar key

Porém o jar principal não está assinado. Ele também deve ser assinado ?

Marcelo_FS

Sim, você tem que assinar todos os .jar que vai baixar para a máquina e colocar no seu arquivo .jnlp:

<security>
    <all-permissions/>
</security>
N

Amigo,
como faço para saber se o meu jar está assinado ou não ?

Depois que eu assino com o comando

jarsigner -keystore D:\oracle\mykeystore -storepass 123456 -signedjar as.jar JWS.jar key

ele cria um arquivo chamado as.jar na pasta da aplicação.

Isto significa que ele está assinado ?

E, dentro da minha aplicação tenho 3 .jars, na pasta do tomcat webapps eu devo ter estes mesmos jars ou ele irá o usar os 3 que estão no jar da aplicação principal ?

Marcelo_FS

nael_os:
Amigo,
como faço para saber se o meu jar está assinado ou não ?

Depois que eu assino com o comando

jarsigner -keystore D:\oracle\mykeystore -storepass 123456 -signedjar as.jar JWS.jar key

ele cria um arquivo chamado as.jar na pasta da aplicação.

Isto significa que ele está assinado ?

Retira o parâmetro “-signedjar as.jar” do comando, você está gerando um segundo arquivo .jar assinado. Sem esse parâmetro, ele irá sobrescrever o .jar original com o assinado.

Pra saber se assinou mesmo, abre o .jar com um (des)compactador e o META-INF/Manifest.mf em um editor de textos; se o jar estiver assinado, você verá vários hashes SHA1.

nael_os:

E, dentro da minha aplicação tenho 3 .jars, na pasta do tomcat webapps eu devo ter estes mesmos jars ou ele irá o usar os 3 que estão no jar da aplicação principal ?

Você não está usando JWS? Ele usará os .jar que você indicar no arquivo .jnlp, independente de onde eles estão… o tomcat não tem nada a ver com isso, coitado :wink:

Criado 9 de fevereiro de 2009
Ultima resposta 11 de fev. de 2009
Respostas 5
Participantes 2