2012-10-31 17 views
6

Sto lavorando con un certo codice di nuovo nel 2003. V'è un riferimento alla seguente classe:Legacy Java utilizzare il codice di com.sun.net.ssl.internal.ssl.Provider()

new com.sun.net.ssl.internal.ssl.Provider() 

si sta causando un errore:

Access restriction: The type Provider is not accessible due to restriction on required library /Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/jsse.jar

qualcuno ha qualche suggerimento per una valida alternativa all'utilizzo di questa classe?

+0

Non conosco quella classe, ma posso leggere 'ssl'. Se questo è Secure Socket Layer, ti preghiamo di prendere in considerazione [javax.net.ssl. *] (Http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/package-summary.html) – ignis

+2

C'è raramente qualsiasi motivo per istanziare il provider manualmente in questo modo. Qual è il codice in giro? – Bruno

risposta

2

È possibile trasformarlo in un avviso o non evento nelle preferenze di Eclipse Java->Compiler->Errors/Warnings->Deprecated and restricted API. Nota, come altri hanno già detto, questa non è la migliore pratica e dovrebbe essere evitata quando si hanno alternative.

+1

Sì, è possibile, ma generalmente non si dovrebbe, almeno non a livello globale. – sleske

+0

perché votarlo? è un modo praticabile di trattare il codice legacy –

+0

Come raccomandazione generale lo trovo pericoloso. Come soluzione temporanea può essere ok. Mi piace la tua modifica e rimosso il downvote. – sleske

6

Nella maggior parte dei casi, non è necessario creare o acquisire autonomamente un'istanza di provider. Come il Oracle Providers documentation dice:

General purpose applications SHOULD NOT request cryptographic services from specific providers. That is:

getInstance("...", "SunJCE"); // not recommended 
    vs. 
getInstance("...");   // recommended 

Inoltre, ovunque ci sia un parametro di sovraccarico per il provider, tende ad assumere una stringa o un'istanza, ma la stringa (nome) sarebbe probabilmente più comune. (Passare un'istanza può essere utile a volte, ad esempio per alcune configurazioni PKCS # 11, ma è insolito.)

Il JCA documentation about Providers dovrebbe essere utile.

Se si desidera veramente ottenere un'istanza specifica, è possibile utilizzare Security.getProvider(name). Troverete i nomi appropriati nella documentazione dei fornitori.

3

Lancia via quella riga di codice. Anche buttare via ogni riferimento al pacchetto com.sun.net.ssl ei suoi sotto-pacchetti: fissare le importazioni in modo che si riferiscono alle classi in javax.net.ssl.

Questo è pre-JDK 1.4 del codice, dai tempi in cui era JSSE download separato.

Problemi correlati