2012-10-31 2 views
6

다음 클래스에 대한 참조가레거시 자바 코드의 사용은 내가 2003 년에 다시에서 일부 코드를 함께 일하고

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

사람이이 클래스를 사용하여 적절한 대안을 제안이 있습니까 :이 오류를 일으키는?

+0

나는 그 수업을 모른다. 그러나 나는 'ssl'을 읽을 수있다. 이것이 Secure Socket Layer 인 경우 [javax.net.ssl. *] (http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/package-summary.html) – ignis

+2

을 참조하십시오. 이런 경우 공급자를 수동으로 인스턴스화 할 이유가 거의 없습니다. 코드는 무엇입니까? – Bruno

답변

2

Eclipse 기본 설정 Java->Compiler->Errors/Warnings->Deprecated and restricted API에서 경고 또는 비 이벤트로 설정할 수 있습니다. 다른 사람들이 말했듯이, 이것은 최선의 관행이 아니므로 대안이있을 때 피해야합니다.

+1

네, 할 수는 있지만 적어도 전 세계적으로는 안됩니다. – sleske

+0

왜 이것을 투표합니까? 레거시 코드를 처리 할 수있는 실행 가능한 방법입니다. –

+0

일반적인 권장 사항으로 위험하다는 것을 알았습니다. 일시적인 해결책으로는 괜찮을 수 있습니다. 나는 편집을 좋아하고 downvote를 삭제했습니다. – sleske

6

대부분의 경우 실제로 공급자 인스턴스를 직접 만들거나 가져올 필요가 없습니다. Oracle Providers documentation는 말하기를 : 공급자에 대한 오버로드 된 매개 변수가있을 때마다

또한

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

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

, 그것은 문자열 또는 인스턴스 중 하나를 가지고하는 경향이 있지만, 문자열 (이름) 아마 더 일반적인 것입니다. 예를 들어 일부 PKCS # 11 구성의 경우 인스턴스를 전달하는 것이 유용 할 수 있지만 일반적이지는 않습니다.

JCA documentation about Providers이 유용합니다.

특정 인스턴스를 실제로 잡고 싶다면 Security.getProvider(name)을 사용할 수 있습니다. 공급자 설명서에서 적절한 이름을 찾을 수 있습니다.

3

코드 줄을 멀리 내십시오. 또한 com.sun.net.ssl 패키지 및 하위 패키지에 대한 참조를 버리십시오. 클래스를 참조하도록 가져 오기를 수정하십시오.

이것은 JSSE가 별도로 다운로드 된 날부터 JDK 1.4 이전 코드입니다.

관련 문제