Reflection e Java Web Start [RESOLVIDO]

3 respostas
themage

Boa tarde pessoALL,

Seguinte: tenho uma aplicação que usa reflection para identificar quais telas do meu sistema são “autenticaveis” (usuário/permissão). Quando executo minha aplicação local, consigo usar reflection perfeitamente. Quando utilizo web start na rede local também consigo (coloco meu jar compartilhado em uma pasta da rede). Porem, minha aplicação passou a ser distribuida na web. Quando utilizo System.getProperty(“java.class.path”) o path aponta pra pasta da JRE.
Tentei deixar um jar disponivel em um http://www.xxx.com.br/arquivo.jar e fazer reflexão neste, mas tambem nao consegui. Tentei até “baixar” esse jar pro disco local mas da que o arquivo ficou corrompido (URL, HttpURLConnection, BufferedReader, OutputStream…)
Estava pensando em fazer reflexão no jar que o web start faz cache (baixa do conteiner).
Alguém sabe onde o web start coloca esse arquivo? Sabe se é possível?

Achei isso aki tb:
“Problemas de segurança… o API reflection precisa de acesso ao runtime de uma forma que níveis de segurança mais rígidos não permitiriam, por exemplo, applets, ou seja, se for aplicação web, esquece tb…”
http://www.javafree.org/javabb/viewtopic.jbb?t=855773

Obrigado pela atenção,

3 Respostas

B

Ola,

Bom, para se usar reflection num cliente JWS é necessário que os jar’s estejam assinados, senão dá SecurityException

themage

Tô ligado. Todos estão assinados.

themage

PessoALL,

Resolvi o problema:

URL[] urls = null;
        URLClassLoader classLoader = null;
        InputStream is = null;

        try {
            URL url = new URL("http://www.xxx.com.br:8080/meujar.jar");
            urls = new URL[]{url};
            classLoader = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestProperty("Request-Method", "GET");
            connection.setDoInput(true);
            connection.setDoOutput(false);
            connection.connect();
            is = connection.getInputStream();
        } catch (Exception e) {
            e.printStackTrace();
        }

        JarInputStream jis = new JarInputStream(is);
        JarEntry entry;

        while ((entry = jis.getNextJarEntry()) != null) {
            // aki faço as reflexões que preciso
        }

Valew!!!

Criado 4 de março de 2008
Ultima resposta 5 de mar. de 2008
Respostas 3
Participantes 2