2010-11-23 7 views
1

残念ながらjava.net_yという名前のJavaクラスをインポートしています。私のコードはコンパイルが、私はそれを実行しようとすると、私が取得:Javaで始まるJavaクラス名

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

私はjava.ioなどのコアJavaクラスを上書きしようとしているについての他のスレッドを読んだ.....私がやっているものではないthatsの。 ...私が持っているこの外部クラスはちょうどひどく名前が付けられています。

もう1つのスレッドには反射が記載されていますが、その必要があるかどうかは不明です。

どうすればよいですか?

+1

はたぶん別でそのパッケージを入れたときにこれを行うには、

-Xbootclasspath 

の代わりに、定期的な

-classpath 

に、このオーバーライドされたクラスを置く必要がありますか?それはmypackage.java.met_y – Adam

答えて

5

どうすればよいですか?

このクラスの名前を変更してください。

+0

になります。それは単純ではありません...クラスは実際にはWSDLから生成されたWebサービスです。 – Yusuf

+1

カスタムクラスローダーを使用して調査することもできます。これは正しい答えではないため、答えとして残さないでください;-) – Grundlefleck

+0

@Yusuf、WSDLからWebサービスプロキシを再生成できますか?別のパッケージにプロキシクラスを作成しようとしていますか? –

0

Java Decompilerを使用して、インポートする内容をリバースエンジニアリングし、必要な変更を加えてから再コンパイルすることです。

実際には、ある種の.jarファイルやそのような行に沿ってインポートしようとしていると仮定しています。クラスを1つだけインポートする場合は、名前を変更するだけです。

2

クラスがWebサービス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で実行されている

関連する問題