OVH Cloud OVH Cloud

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0

5 réponses
Avatar
brice-64
bonjour à tous,
mon problème est le suivant, je voudrais envoyer une valeur d'une
classe à une servlet....
aucune erreur lorsque je compile mais dans mon navigateur, voici ce
que j'ai :

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:508)
at java.util.ArrayList.get(ArrayList.java:320)
at fr.loginord.ldap.openLdap.setLdapinfos(openLdap.java:39)
at LGInc_creation.processRequest(LGInc_creation.java:570)
at LGInc_creation.doGet(LGInc_creation.java:774)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

Si quelqu'un pouvait me filer un ptit coup de main... merci
brice

5 réponses

Avatar
Christophe M.
Et pourtant, moi j'ai toujours trouvé les messages d'"erreurs" de java
clair :-)
Tu a donc un problème d'index dans un tableau (ou autre classe
implémentant un Collection). Avec une classe qui essaye d'atteindre un
indice hors (OutOfBounds) de la taille du tableau. Y a 0 éléments dans
le tableau (Size) alors que tu demande l'élément 1 (Index)

Voilà, c'est tout ce qu'on peut faire pour toi avec si peu d'information...


brice wrote:
bonjour à tous,
mon problème est le suivant, je voudrais envoyer une valeur d'une
classe à une servlet....
aucune erreur lorsque je compile mais dans mon navigateur, voici ce
que j'ai :

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:508)
at java.util.ArrayList.get(ArrayList.java:320)
at fr.loginord.ldap.openLdap.setLdapinfos(openLdap.java:39)
at LGInc_creation.processRequest(LGInc_creation.java:570)
at LGInc_creation.doGet(LGInc_creation.java:774)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

Si quelqu'un pouvait me filer un ptit coup de main... merci
brice


Avatar
gaelcalvar
je ne suis pas expert mais je pense que tu utilise mal les index du
tableau, tu met 1 a la place de 0 (ou l'inverse)...
Avatar
brice-64
(Atao) wrote in message news:...
je ne suis pas expert mais je pense que tu utilise mal les index du
tableau, tu met 1 a la place de 0 (ou l'inverse)...



En fait je voudrais récupérer des valeurs qui se trouvent dans une
array list.... voici un bout de mon source :
ma class :
........
public ArrayList getLdapinfos(String str_matricule) {

Ldap_infos(str_matricule);
return retourLdapinfos;
}


private ArrayList Ldap_infos(String str_matricule) {

ArrayList al_retour = new ArrayList();
//Definition de la classe à utiliser
Hashtable env = new Hashtable();
DirContext ctx = null;
String tmp = new String();

//Variable d'environnement
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");

//Adresse de l'annuaire LDAP
env.put(Context.PROVIDER_URL, "ldap://" + SERVEUR + ":389");

//Definition de l'authentification
env.put(Context.SECURITY_AUTHENTICATION, "simple");
try {
//Recuperation de pointeur sur le contexte
ctx = new InitialDirContext(env);

//Definition les options de recherche
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String my_filter = "(&(objectClass=jetspeeduser)
(uid="+str_matricule+"))";

//Options de recherche
NamingEnumeration results=ctx.search(LDAP_PORTAIL,
my_filter, constraints);
String myAttrs[] = { "mail", "sn", "givenName"};
String dn = "";

//Affichage des resultats
while ( results != null && results.hasMore() ) {
SearchResult entry = (SearchResult)results.next();
dn = entry.getName().toString();
Attributes ar = ctx.getAttributes(dn +","+
LDAP_PORTAIL,myAttrs);


Attributes attrs = entry.getAttributes();
if ( results != null ) {
//0
if ( attrs.get("mail") != null) {

al_retour.add(attrs.get("mail").toString().substring(6));
} else {
al_retour.add("Pas d'adresse mail");
}
//1
if ( attrs.get("sn") != null) {

al_retour.add(attrs.get("sn").toString().substring(4));
} else {
al_retour.add("Pas de Nom");
}
//2
if ( attrs.get("givenName") != null) {

al_retour.add(attrs.get("givenName").toString().substring(11));
} else {
al_retour.add("Pas de prénom");
}
}

ma servlet :
.........
ArrayList retourLdapinfos = new ArrayList();
String str_nom ="";

retourLdapinfos = openLdap.getLdapinfos(str_matricule);
str_nom = retourLdapinfos.get(1).toString();

}
..........

En loggant je tombe sur l'erreur de taille et d'index.....

Avatar
Christophe M.
c'est très certainement la ligne :
str_nom = retourLdapinfos.get(1).toString();
dans la servlet qui pose problème.

ton retourLdapinfos doit être vide...
sans doute parce que tu fais une boucle while(results != null) et qu'il
doit pas passer dans la boucle, ce qui fait que al_retour n'est pas
rempli...

brice wrote:
(Atao) wrote in message news:...

je ne suis pas expert mais je pense que tu utilise mal les index du
tableau, tu met 1 a la place de 0 (ou l'inverse)...




En fait je voudrais récupérer des valeurs qui se trouvent dans une
array list.... voici un bout de mon source :
ma class :
........
public ArrayList getLdapinfos(String str_matricule) {

Ldap_infos(str_matricule);
return retourLdapinfos;
}


private ArrayList Ldap_infos(String str_matricule) {

ArrayList al_retour = new ArrayList();
//Definition de la classe à utiliser
Hashtable env = new Hashtable();
DirContext ctx = null;
String tmp = new String();

//Variable d'environnement
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");

//Adresse de l'annuaire LDAP
env.put(Context.PROVIDER_URL, "ldap://" + SERVEUR + ":389");

//Definition de l'authentification
env.put(Context.SECURITY_AUTHENTICATION, "simple");
try {
//Recuperation de pointeur sur le contexte
ctx = new InitialDirContext(env);

//Definition les options de recherche
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String my_filter = "(&(objectClass=jetspeeduser)
(uid="+str_matricule+"))";

//Options de recherche
NamingEnumeration results=ctx.search(LDAP_PORTAIL,
my_filter, constraints);
String myAttrs[] = { "mail", "sn", "givenName"};
String dn = "";

//Affichage des resultats
while ( results != null && results.hasMore() ) {
SearchResult entry = (SearchResult)results.next();
dn = entry.getName().toString();
Attributes ar = ctx.getAttributes(dn +","+
LDAP_PORTAIL,myAttrs);


Attributes attrs = entry.getAttributes();
if ( results != null ) {
//0
if ( attrs.get("mail") != null) {

al_retour.add(attrs.get("mail").toString().substring(6));
} else {
al_retour.add("Pas d'adresse mail");
}
//1
if ( attrs.get("sn") != null) {

al_retour.add(attrs.get("sn").toString().substring(4));
} else {
al_retour.add("Pas de Nom");
}
//2
if ( attrs.get("givenName") != null) {

al_retour.add(attrs.get("givenName").toString().substring(11));
} else {
al_retour.add("Pas de prénom");
}
}

ma servlet :
.........
ArrayList retourLdapinfos = new ArrayList();
String str_nom ="";

retourLdapinfos = openLdap.getLdapinfos(str_matricule);
str_nom = retourLdapinfos.get(1).toString();

}
..........

En loggant je tombe sur l'erreur de taille et d'index.....



Avatar
brice-64
"Christophe M." wrote in message news:<3f276cd2$...
c'est très certainement la ligne :
str_nom = retourLdapinfos.get(1).toString();
dans la servlet qui pose problème.

ton retourLdapinfos doit être vide...
sans doute parce que tu fais une boucle while(results != null) et qu'il
doit pas passer dans la boucle, ce qui fait que al_retour n'est pas
rempli...

brice wrote:
(Atao) wrote in message news:...

je ne suis pas expert mais je pense que tu utilise mal les index du
tableau, tu met 1 a la place de 0 (ou l'inverse)...




En fait je voudrais récupérer des valeurs qui se trouvent dans une
array list.... voici un bout de mon source :
ma class :
........
public ArrayList getLdapinfos(String str_matricule) {

Ldap_infos(str_matricule);
return retourLdapinfos;
}


private ArrayList Ldap_infos(String str_matricule) {

ArrayList al_retour = new ArrayList();
//Definition de la classe à utiliser
Hashtable env = new Hashtable();
DirContext ctx = null;
String tmp = new String();

//Variable d'environnement
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");

//Adresse de l'annuaire LDAP
env.put(Context.PROVIDER_URL, "ldap://" + SERVEUR + ":389");

//Definition de l'authentification
env.put(Context.SECURITY_AUTHENTICATION, "simple");
try {
//Recuperation de pointeur sur le contexte
ctx = new InitialDirContext(env);

//Definition les options de recherche
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String my_filter = "(&(objectClass=jetspeeduser)
(uid="+str_matricule+"))";

//Options de recherche
NamingEnumeration results=ctx.search(LDAP_PORTAIL,
my_filter, constraints);
String myAttrs[] = { "mail", "sn", "givenName"};
String dn = "";

//Affichage des resultats
while ( results != null && results.hasMore() ) {
SearchResult entry = (SearchResult)results.next();
dn = entry.getName().toString();
Attributes ar = ctx.getAttributes(dn +","+
LDAP_PORTAIL,myAttrs);


Attributes attrs = entry.getAttributes();
if ( results != null ) {
//0
if ( attrs.get("mail") != null) {

al_retour.add(attrs.get("mail").toString().substring(6));
} else {
al_retour.add("Pas d'adresse mail");
}
//1
if ( attrs.get("sn") != null) {

al_retour.add(attrs.get("sn").toString().substring(4));
} else {
al_retour.add("Pas de Nom");
}
//2
if ( attrs.get("givenName") != null) {

al_retour.add(attrs.get("givenName").toString().substring(11));
} else {
al_retour.add("Pas de prénom");
}
}

ma servlet :
.........
ArrayList retourLdapinfos = new ArrayList();
String str_nom ="";

retourLdapinfos = openLdap.getLdapinfos(str_matricule);
str_nom = retourLdapinfos.get(1).toString();

}
..........

En loggant je tombe sur l'erreur de taille et d'index.....



en fait ça viendrais de ma class qui ne fournit pas les infos à ma
servlet... comment fais-tu pour logger les infos que retourne ma class
??