2010-11-23 5 views
1

불행히도 java.net_y라는 이름의 자바 클래스를 가져 왔습니다. 내 코드는 컴파일,하지만 난 그것을 실행하려고하면 내가 얻을 : 나는 java.io 같은 핵심 자바 클래스를 재정의하는 시도에 대해 다른 스레드를 읽은java로 시작하는 자바 클래스 이름

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.net_y 

..... 내가 뭐하는 거지하지 이잖아. ... 내가 가지고있는이 외부 수업은 심하게 명명되었습니다.

또 다른 스레드는 반사를 언급했습니다 ... 필요한지 확실하지 않습니다.

어떻게해야합니까?

+1

어쩌면 다른에서 해당 패키지를 넣을 때이 작업을 수행하려면

-Xbootclasspath 

대신 일반

-classpath 

이 오버라이드 (override) 클래스를 넣어해야? 그래서 mypackage.java.met_y가됩니다. – Adam

답변

5

어떻게해야합니까?

해당 클래스의 이름을 변경하십시오.

+0

그 간단한 것은 아닙니다 ... 클래스는 실제로 웹 서비스입니다 ... WSDL에서 생성됩니다. – Yusuf

+1

당신은 또한 사용자 정의 클래스 로더를 사용하여 조사 할 수 있습니다 ... 나는 올바른 답변이 아니기 때문에 이것을 대답으로 남기지 않을 것입니다 ;-) – Grundlefleck

+0

@Yusuf, WSDL에서 웹 서비스 프록시를 다시 생성 할 수 있습니까? 다른 패키지에 프록시 클래스를 만들려고 시도하는 시간이 있습니까? –

0

Java Decompiler을 사용하면 가져 오는 내용을 리버스 엔지니어 할 수 있으며, 필요한 사항을 변경 한 다음 다시 컴파일 할 수 있습니다.

실제로 어떤 종류의 .jar 파일이나 그 선을 따라 가져 오려고한다고 가정합니다. 하나의 클래스 만 가져 오는 경우에는 이름을 바꾸면됩니다.

2

클래스가 웹 서비스 WSDL에서 생성 된 경우 가장 좋은 방법은이를 다시 생성하고 패키지 이름을 다른 것으로 강제 변환하는 것입니다. 대부분의 WSDL-to-java 도구에는이를 수행 할 수있는 매개 변수가 있습니다.

0

클래스의 이름을 변경해야합니다. Java 패키지에는 클래스를 넣을 수 없습니다. 나는이 정확하게 당신이 볼 수있는 예외 이해 지금까지

if ((name != null) && name.startsWith("java.")) { 
    throw new SecurityException("Prohibited package name: " + 
       name.substring(0, name.lastIndexOf('.'))); 
} 

: 이것은 다음과 같은 검사를 수행 개인 방법이다

java.lang.ClassLoader#predefineClass() 

참조하십시오.

때때로 사람들은 JDK에서 클래스를 대체해야합니다. 그것은 당신의 경우는 아니지만 나는 단지 그것을 위해 언급하고자합니다. 당신이 당신의 JVM 실행