Illegal JID (no spaces in database)

Ok, this is probably going to be a long post.

I am workign with Openfire 3.8.2 on CentOS release 5.9 (Final) with kernel 2.6.18-348.1.1.el5 #1 SMP. (64 bit).

The server, incase it’s important has 16GB of EDO DDR3, and 2x QuadCore Intel XEON CPU’s

I’m using a custom JDBC/MySQL integration. Users seem to work greatm and when I bring up a list of groups, the list seems fine, and the numbers of users in each group seems fine. But when I try and bring up a list of users in any group via the admin console, I get this error:

HTTP ERROR 500

Problem accessing /group-edit.jsp. Reason:

Illegal JID: Wasuremono @chat.misticpets.com

Caused by:

java.lang.IllegalArgumentException: Illegal JID: Wasuremono @chat.misticpets.com at org.xmpp.packet.JID.<init>(JID.java:542) at org.xmpp.packet.JID.<init>(JID.java:496) at org.jivesoftware.openfire.XMPPServer.createJID(XMPPServer.java:304) at org.jivesoftware.openfire.group.JDBCGroupProvider.getMembers(JDBCGroupProvider.java:187) at org.jivesoftware.openfire.group.JDBCGroupProvider.getGroup(JDBCGroupProvider.java:154) at org.jivesoftware.openfire.group.GroupManager.getGroup(GroupManager.java:330) at org.jivesoftware.openfire.group.GroupManager.getGroup(GroupManager.java:309) at org.jivesoftware.openfire.group.GroupCollection$GroupIterator.getNextElement(GroupCollection.java:113) at org.jivesoftware.openfire.group.GroupCollection$GroupIterator.hasNext(GroupCollection.java:76) at org.jivesoftware.openfire.admin.group_002dedit_jsp._jspService(group_002dedit_jsp.java:480) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359) at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:74) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:349) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.IllegalArgumentException: The input is not a valid JID node: Wasuremono at org.xmpp.packet.JID.nodeprep(JID.java:294) at org.xmpp.packet.JID.<init>(JID.java:529) ... 47 more

Caused by:

java.lang.IllegalArgumentException: The input is not a valid JID node: Wasuremono at org.xmpp.packet.JID.nodeprep(JID.java:294) at org.xmpp.packet.JID.<init>(JID.java:529) at org.xmpp.packet.JID.<init>(JID.java:496) at org.jivesoftware.openfire.XMPPServer.createJID(XMPPServer.java:304) at org.jivesoftware.openfire.group.JDBCGroupProvider.getMembers(JDBCGroupProvider.java:187) at org.jivesoftware.openfire.group.JDBCGroupProvider.getGroup(JDBCGroupProvider.java:154) at org.jivesoftware.openfire.group.GroupManager.getGroup(GroupManager.java:330) at org.jivesoftware.openfire.group.GroupManager.getGroup(GroupManager.java:309) at org.jivesoftware.openfire.group.GroupCollection$GroupIterator.getNextElement(GroupCollection.java:113) at org.jivesoftware.openfire.group.GroupCollection$GroupIterator.hasNext(GroupCollection.java:76) at org.jivesoftware.openfire.admin.group_002dedit_jsp._jspService(group_002dedit_jsp.java:480) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:547) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1359) at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.util.LocaleFilter.doFilter(LocaleFilter.java:74) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.util.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.admin.PluginFilter.doFilter(PluginFilter.java:78) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.jivesoftware.admin.AuthCheckFilter.doFilter(AuthCheckFilter.java:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1330) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:478) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:941) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:875) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110) at org.eclipse.jetty.server.Server.handle(Server.java:349) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:919) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533) at java.lang.Thread.run(Unknown Source)

Now, based on the way the JID is first displayed, I figured there was empty space at the end of the username, but it wasn’t apparent in the MySQL database. So I ran the following just in case…

UPDATE `users` SET `username` = TRIM( `username` )

which affected 0 rows, so just in case, I also ran

UPDATE `users` SET `username` = replace( `username`,` `,`` )

which also affected 0 rows…

The SQL that I use to call the users for the groups is as follows…

(SELECT @group_name :=? AS username) UNION (SELECT `to` AS username FROM friends WHERE `from`=@group_name AND `accepted`='Yes') UNION (SELECT `from` AS username FROM friends WHERE `to`=@group_name AND `accepted`='Yes') UNION (SELECT username FROM users u INNER JOIN alliance_members am ON am.userid=u.id INNER JOIN alliance a ON a.id=am.allianceid WHERE a.name=@group_name AND a.gChat='1' AND am.rank!='Alliance Leader')

If I left out a cruicial bit of information let me know.

Oh, the JID in question, does NOT appear in any of the group’s I’ve tested.

Fixed… IT was my mistake…

the issue wasn’t in the users table, it was in the friends table. Some times I just need to slow down… (Thank You, to a friend whom saw this post, contacted me on Skype and suggested deleting the username from the users database and see what happens).