2013-05-27 7 views
2

Je reçois une exception java.lang.IllegalArgumentException: ObjectId invalide [0] lorsque j'essaie de faire semblable au code ci-dessous dans un de ma classe.java.lang.IllegalArgumentException: ObjectId invalide [0]

String s = "0_abc"; 
-------- 
private ObjectId obj; [Instance variable] 
public NewClass(String s){ 
    String[] sarray = s.split("_"); 
    obj = new ObjectId(sarray[0]); 
} 

Quelle pourrait être la raison de l'échec?

+0

Ce n'est pas une syntaxe valide ... Qu'essayez-vous de faire avec votre troisième ligne? Si c'est pour créer un nouvel ObjectID en utilisant le 0ème élément de sarray, vous devez utiliser des parenthèses normales, pas celles qui sont bouclées. c'est à dire. (et) – Ren

+0

Oups ... désolé! Changé ça! – Mercenary

+0

Publiez votre définition de classe ObjectId ici - après quoi nous pourrons vous donner de meilleures suggestions –

Répondre

1

Je ObjectId obj = new ObjectId{sarray[0]}; chose devrait être:

ObjectId obj = new ObjectId(sarray[0]); 
0

Malheureusement vous n'avez pas envoyé le stacktrace mais je pense que l'exception est renvoyée par le constructeur de votre classe ObjectId qui ne permet pas l'envoi d'0 comme argument. Je pense aussi que vous vouliez dire new ObjectId(sarray[0]) au lieu de new ObjectId{sarray[0]};. Sinon, je ne comprends pas vraiment comment vous pourriez compiler cela.

+0

Est-ce qu'il lance cette exception lorsque l'argument est 0 dans un autre cas? – Mercenary

4

Je suppose que la classe ObjectId est (org.bson.types.ObjectId) et elle est utilisée dans le pilote Java MongoDB. Cette exception signifie que "0" ne peut pas être passé en tant que valeur pour la construction ObjectId.

Toutes les chaînes n'ont pas une valeur ObjectId correcte. Lorsque ObjectId est initialisé avec la chaîne donnée, la validation est effectuée. Par exemple, ObjectId nécessite une chaîne de 24 caractères. Il y a plus de contraintes et vous pouvez trouver le code source de validation complet in GitHub repo, dans la méthode isValid().

Si vous voulez créer un objet ObjectId avec une valeur correcte, vous pouvez créer en utilisant la méthode d'usine disponible comme ceci:

ObjectId obj = ObjectId.get() 

Cela va créer ObjectId avec la valeur générée automatiquement.

Questions connexes