Importar pacote de acordo com a versão do Java

2 respostas
I

Estou com problema para utilizar a classe PKCS12KeyStore.

No java 1.6 ele fica no pacote com.sun.net.ssl.internal.pkcs12, e no java 1.7 ele fica no pacote sun.security.pkcs12.

Tem alguma forma de tratar isso para o compilador não reclamar?

Tentei verificar a versão do Java no construtor da minha classe, mas mesmo assim ele não permite compilar.

public class Certificar {
private KeyStoreSpi pk12;

public Certificar() {
	String jVersion = System.getProperty("java.version");
	System.out.println(jVersion);
	if(jVersion.startsWith("1.7.")) {
		pk12 = new sun.security.pkcs12.PKCS12KeyStore();
	} else {
		pk12 = new com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore();
	}
}

}

Alguém poderia me dar uma luz nessa?

2 Respostas

E

Esse é um caso clássico em que você é obrigado a usar Reflection.
Como ambas as classes herdam de java.security.KeyStoreSpi, você pode, usando Reflection, instanciar por nome a classe certa para cada um dos casos.

I

Valeu entanglement :thumbup: funcionou belezinha.

Pra quem quiser ver a solução:

private KeyStoreSpi pk12;

public Certificar() {
	String jVersion = System.getProperty("java.version");
	try {
	if(jVersion.startsWith("1.7.")) {
		pk12 = (KeyStoreSpi) Class.forName("sun.security.pkcs12.PKCS12KeyStore").newInstance();
	} else {
		pk12 = (KeyStoreSpi) Class.forName("com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore").newInstance();
	}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

}

Criado 6 de junho de 2012
Ultima resposta 6 de jun. de 2012
Respostas 2
Participantes 2