Yaki
April 25, 2007, 11:47am
1
I’'m trying to use the SMACK jar to search for a user in a directory (search by first/last/ name or email or combination).
I tried to use the UserSearchManager but failed.
Is that the right way to do a user search? Can you provide me with a code sample? I tried the code in the UserSearchManager API but failed.
Sample from UserSearchManager API:
XMPPConnection con = new XMPPConnection(“jabber.org ”);
con.login(“john”, “doe”);
UserSearchManager search = new UserSearchManager(con, “users.jabber.org ”);
Form searchForm = search.getSearchForm();
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer(“last”, “DeMoro”);
ReportedData data = search.getSearchResults(answerForm);
Is there another way to do that search?
Thanks
Yaki
April 25, 2007, 2:58pm
3
No matter how I’‘m using the Form and its parameters, data always return as null. Probably I’'m using it the wrong way, or using wrong parameters
data: ReportedData data = search.getSearchResults(answerForm);
It looks like you’‘ve followed the example code correctly. The docs don’'t say anything about it, but maybe it returns null when there are no matches. Have you tried searching for someone that exists on your server?
Yaki
April 25, 2007, 3:40pm
5
In my user directory I have a user called:
a2@aaa.bbb.com .
I tried the followings:
answerFor.setAnswer(“first”, “a2”);
After failing I tried:
answerFor.setAnswer(“first”, "a2@aaa.bbb.com ");
After failing I tried:
answerFor.setAnswer(“first”, “a2%”);
I failed with them all.
I tried the same test with the fillowing fields:
“first”, “last”, “nick” “email”.
Failed with all.
The difference between my code and the sample was due to difference in the API:
UserSearchManager search = new UserSearchManager(con); // instead of having another param, I think it is the service name
Form searchForm = um.getSearchForm(XMPP_SEARCH_SERVICE); // instead of having () like in the sample
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer(“last”, “a2%”);
df = answerForm.getDataFormToSend();
ReportedData data = um.getSearchResults(answerForm, XMPP_SEARCH_SERVICE); // instead of having just answerForm
but I don’'t think this difference should impact the results
I just checked out the spark debugger, and Spark searches the username, name, and email fields when you use it’'s built-in search, so give username and name a try.
If that doesn’'t work, comparing the raw packets your program is sending with the ones Spark sends may shed some light on things.
Yaki
April 26, 2007, 8:12am
7
Problem solved.
Turned out that on registering the user I did not use jud:
Registration request = new Registration();
request.setType(IQ.Type.SET);
request.setTo(“users.” + client.JABBER_XMPP_DOMAIN_NAME);
Map<String,String> attributes1 = new HashMap<String, String>();
attributes1.put(“nick”," a2 ");
attributes1.put(“first”," a2 ");
attributes1.put(“last”," a2 ");
attributes1.put("email","a2t@aaa.com");
request.setAttributes(attributes1);
connection.sendPacket(request);
I only saved to user profile in a VCard.
Adding these lines solved the problem
Thanks for the help