setProperty getProperty problem
Bonjour
j'ai un pb avec avec les propriétés.
j'ai un tread qui définit des propriétés
Code:
1 2 3 4 5
| String inUrl1 = "file:data/inbox";
properties.setProperty(inUrl1 + ".origine", "ABC");
...
inUrl2 = "file:data/inbox2";
properties.setProperty(inUrl2 + ".origine", "DEF"); |
ce même thread passe l'url à un routeBuilder de Camel ainsi que l'objet properties. le route builder crée des routes camel et instancie un bean qui garde une référence sur les propriétés.
camel démarre la route et lance plusieurs treads
parmis ces treads il y en a un qui appelle une méthode de l'instance du bean.
en mode debug je vois bien l'objet properties avec son contenu
je vois bien mes deux propriétés avec leur clef
"file:data/inbox.origine" et "file:data/inbox2.origine"
dans cette méthode je récupère de camel l'url d'origine et j'ai
"file:data/inbox?option1=...."
je fais donc un split pour récupérer l'url d'origine et j'obtiens
"file:data/inbox"
mais je ne parviens pas à faire mon get.
Code:
1 2 3 4
| String uri = exchange.getFromEndpoint().getEndpointUri();
String[] part = uri.split("\\?");
uri = part[0].toString();
origine = properties.getProperty(uri + ".origine"); |
le getProperty retourne toujours null
uri + ".origine" me donne pourtant bien "file:data/inbox2.origine"
si j regarde de plus pres dans mon débuguer
je vois que la propriété est définie ainsi
Code:
1 2 3 4 5
|
properties [
{key : "file:data/inbox.origine" : id105, value : "ABC"},
{key : "file:data/inbox2.origine" : id144, value : "DEF"},
] |
mais le résultat de uri + ".origine" contient bien la même chaine de caractère mais avec un id d'objet en mémoire différent id192
j'ai essayé avec un variable statique pour voir si mon getProperty retournait quelque chose et il m'envoie effectivement "DEF"
Je mais donc dans mes propriété une valeur avec une chaine donnée
mais je ne peux pas la récupérer car la chaine que j'utilise alors bien ayant la même valeur n'est pas le même objet.
je n'ai pas d'autre possibilité pour connaitre la source que d'utiliser le getEndpointUri c'est le seul élément que j'ai à ma disposition.
il me parait fou que le système de propriété ne se base pas sur une comparaison de valeur mais d'objet
il me parait évident qu'on n'a jamais la garantie d'avoir le même objet.
A+JYT