2010-11-23 7 views
1

J'ai une classe Java que j'importe, malheureusement, appelée java.net_y. Mon code compile, mais lorsque je tente de l'exécuter je reçois:Nom de la classe Java qui commence par java

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

J'ai lu d'autres threads d'essayer de remplacer les classes Java de base comme java.io ..... thats pas ce que je fais. ... cette classe externe que j'ai est juste mal nommée. Un autre thread mentionné réflexion ... pas sûr si cela est nécessaire.

Que puis-je faire?

+1

peut-être mettre ce paquet dans un autre? donc ça devient mypackage.java.met_y – Adam

Répondre

5

Que puis-je faire?

Renommez cette classe.

+0

Ce n'est pas si simple ... la classe est en fait un Web Service ... généré à partir d'un WSDL. – Yusuf

+1

Vous pouvez également étudier en utilisant un chargeur de classe personnalisée ... Je ne laisse pas cela comme une réponse parce que ce n'est certainement pas le bon ;-) – Grundlefleck

+0

@Yusuf, pouvez-vous re-générer le proxy de service Web à partir du WSDL, cette temps à essayer de créer la classe proxy dans un package différent? –

0

Ce que vous pouvez faire est d'utiliser Java Decompiler pour effectuer le reverse engineering de ce que vous importez, apporter les modifications nécessaires, puis recompiler.

Je suppose en fait que vous essayez d'importer une sorte de fichier .jar ou quelque chose du genre. Si vous importez une seule classe, tout ce que vous devez faire est de la renommer.

2

Si la classe a été générée à partir d'un WSDL de service Web, le mieux serait de la régénérer et de forcer le nom du paquet à autre chose. La plupart des outils WSDL-to-Java ont des paramètres pour vous permettre de le faire.

0

Je devrais renommer votre classe. Vous ne pouvez pas mettre de classes dans le paquet java. Voir

java.lang.ClassLoader#predefineClass() 

Ceci est une méthode privée qui effectue le contrôle suivant:

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

Pour autant que je comprends c'est exactement l'exception que vous voyez.

Parfois, les utilisateurs doivent remplacer les classes de JDK. Ce n'est pas votre cas, mais j'aimerais le mentionner au cas où. Pour ce faire, vous devez mettre cette classe surchargée à

-Xbootclasspath 

au lieu de régulière

-classpath 

lorsque vous utilisez votre machine virtuelle Java

Questions connexes