The value for the useBean class attribute org.jivesoftware.webchat.ChatUser is invalid
<h2>I am using OpenFire 3.6.4 with FastPath. It has been working fine for several years but last week, we started getting this error and the FastPath client cannot connect:</h2>

<pre><code>  Feb 7, 2013 11:12:42 AM org.apache.catalina.core.StandardWrapperValve invoke
  SEVERE: Servlet.service() for servlet jsp threw exception
  org.apache.jasper.JasperException: /userinfo.jsp(22,0) The value for the useBean     class attribute org.jivesoftware.webchat.ChatUser is invalid.
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:148)
at org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1203)
at org.apache.jasper.compiler.Node$UseBean.accept(Node.java:1160)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2393)
at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2399)
at org.apache.jasper.compiler.Node$Root.accept(Node.java:489)
at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2343)
at org.apache.jasper.compiler.Generator.generate(Generator.java:3365)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:295)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:282)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
</code></pre>

<h2>    at java.lang.Thread.run(Unknown Source)</h2>

<p>Here is userinfo.jsp:</p>



<pre><code>&lt;%@ page  import = "org.jivesoftware.webchat.ChatManager,
                com.jivesoftware.smack.workgroup.user.Workgroup,
                org.jivesoftware.smackx.Form,
                org.jivesoftware.smackx.FormField"
                errorPage="fatal.jsp"%&gt;
&lt;%@ page import="java.util.*"%&gt;
&lt;%@ page import="org.jivesoftware.webchat.actions.WorkgroupStatus" %&gt;
&lt;%@ page import="org.jivesoftware.webchat.util.*" %&gt;
&lt;!-- Get and Set Workgroup --&gt;
&lt;jsp:useBean class="org.jivesoftware.webchat.ChatUser" id="chatUser" /&gt;
&lt;jsp:setProperty name="chatUser" property="*" /&gt;
&lt;%
boolean authFailed = ParamUtils.getParameter(request, "authFailed") != null;

String location = (String)session.getAttribute("pageLocation");
if (chatUser.hasSession()) {
    chatUser.removeSession();
}

String workgroup = chatUser.getWorkgroup();
String chatID = chatUser.getChatID();
if (chatID == null) {
    chatID = StringUtils.randomString(10);
}

Workgroup chatWorkgroup = WorkgroupStatus.getWorkgroup(workgroup);
if (!chatWorkgroup.isAvailable()) {
    response.sendRedirect("email/leave-a-message.jsp?workgroup=" + StringUtils.URLEncode(workgroup, "utf-8"));
    return;
}

Form workgroupForm = WorkgroupStatus.getWorkgroupForm(workgroup);
String welcomeText = FormText.getWelcomeText(workgroup);
String startButton = FormText.getStartButton(workgroup);

// Add query string to session
Enumeration params = request.getParameterNames();
Map paramMap = new HashMap();
while (params.hasMoreElements()) {
    String paramName = (String)params.nextElement();
    String paramValue = (String)request.getParameter(paramName);
    paramMap.put(paramName, paramValue);
}
session.setAttribute("params", paramMap);

boolean hasElements = false;
%&gt;
&lt;!-- DEFINE SCRIPTING VARIABLES --&gt;
&lt;script language="JavaScript"&gt;
    var isNav, isIE

    if (parseInt(navigator.appVersion) &gt;= 4) {
        if (navigator.appName == "Netscape")
            isNav = true
        else
            isIE = true
    }

    function checkForEnter(evt, f) {

        var val = 0;
        if (isNav) {
            val = evt.which;
        }
        if (! isNav) {
            val = window.event.keyCode;
        }

        if (val == 13) {
        }
    }
&lt;/script&gt;

&lt;script type="text/javascript"&gt;
function popup(myform) {
    var width = 500;
    var height = 400;
    if (!ValidateForm()) {
        return false;
    }
    if (! window.focus)return true;
    var d = new Date();

    windowname = "framemain";
    var winleft = (screen.width - width) / 2;
    var winUp = (screen.height - height) / 2;
    window.open('', windowname, 'top=' + winUp + ',left=' + winleft + ',height='+height+',width='+width+',location=no,resizable=no,scrollbars=no,status=no');
    myform.target = windowname;
    return true;
}
&lt;/script&gt;

&lt;script&gt;
    function ValidateForm() {
    &lt;%
           Iterator iter = workgroupForm.getFields();
           while(iter.hasNext()){
               FormField field = (FormField)iter.next();
               boolean required = field.isRequired();
               String variable = field.getVariable();
               if(required &amp;&amp; !"email".equals(variable)){

    %&gt;
        if ((! Jtrim(document.f.&lt;%=variable%&gt;.value).length)) {
            alert("You must specify all required fields.");
            document.f.&lt;%= variable%&gt;.focus();
            return false;
        }
    &lt;% }else if(required){ %&gt;
        if ((!isValidEmail(document.f.&lt;%=variable%&gt;.value))) {
            alert("A valid email address is required.");
            document.f.&lt;%= variable%&gt;.focus();
            return false;
        }
    &lt;% }} %&gt;
        document.f.submitForm.disabled = true;
        return true;
    }

    function isBlank(val) {

        if (val == null) {
            return true;
        }
        for (var i = 0; i &lt; val.length; i++) {
            if ((val.charAt(i) != ' ') &amp;&amp; (val.charAt(i) != "\t") &amp;&amp; (val.charAt(i) != "\n") &amp;&amp; (val.charAt(i) != "\r")) {
                return false;
            }
        }

        return true;
    }

    function isInteger(val) {

        if (isBlank(val)) {
            return false;
        }
        for (var i = 0; i &lt; val.length; i++) {
            if (! isDigit(val.charAt(i))) {
                return false;
            }
        }

        return true;
    }

    function isValidEmail(str) {
        if(!Jtrim(str).length){
          return false;
        }
        var apos = str.indexOf("@");
        var dpos = str.indexOf(".");
        var epos = str.indexOf("]");
        var fpos = str.indexOf("[");
        if (apos &lt;= 0 || epos &gt; 0 || fpos &gt; 0)
            return false;

        return true;
    }

    function Jtrim(st) {

        var len = st.length;
        var begin = 0, end = len - 1;
        while (st.charAt(begin) == " " &amp;&amp; begin &lt; len) {
            begin++;
        }
        while (st.charAt(end) == " " &amp;&amp; end &gt; begin) {
            end--;
        }

        return st.substring(begin, end + 1);
    }

    function isDigit(num) {

        if (num.length &gt; 1) {
            return false;
        }
        var string = "1234567890";
        if (string.indexOf(num) != - 1) {
            return true;
        }

        return false;
    }
    // --&gt;
&lt;/script&gt;

&lt;!-- END OF SCRIPTING VARIABLES --&gt;

&lt;%
Cookie [] cookies = request.getCookies();
String nameValue = null;
String emailValue = null;

if (cookies != null) {
    for (int i = 0; i &lt; cookies.length; i++) {
        String name = cookies[i].getName();

        if (name.equals("jive_name")) {
            nameValue = cookies[i].getValue();
        }
        else if (name.equals("jive_email")) {
            emailValue = cookies[i].getValue();
        }
        else if (name.equals("uniqueid")) {
            session.setAttribute("uniqueid", cookies[i].getValue());
        }
    }
    nameValue = ModelUtil.emptyStringIfNull(nameValue);
    emailValue = ModelUtil.emptyStringIfNull(emailValue);

    nameValue = nameValue.replaceAll("_", " ");
}
%&gt;

&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Information &lt;/title&gt;

    &lt;link rel="stylesheet"
          type="text/css"
          href="style.jsp?workgroup=&lt;%= workgroup %&gt;"/&gt;&lt;script language="JavaScript" type="text/javascript" src="common.js"&gt;//Ignore&lt;/script&gt;
&lt;/head&gt;
&lt;body style="margin-top:0px; margin-bottom:20px; margin-right:20px;margin-left:20px" id="defaultwindow"&gt;
&lt;table width="100%" cellpadding="3" cellspacing="2"&gt;
&lt;tr&gt;&lt;td colspan="2" height="1%"&gt;
&lt;img src="getimage?image=logo&amp;workgroup=&lt;%= StringUtils.URLEncode(workgroup, "utf-8") %&gt;"/&gt;
    &lt;/td&gt;
&lt;/tr&gt;
  &lt;form name="f" id="f" action="queue.jsp" method="post" onSubmit="return popup(this);"&gt;
   &lt;!-- Identify all hidden variables. All variables will be passed to the metadata router.
        You can do any name-value pairing you like. Such as product=Jive Live Assistant. Such
        data can be used to effectivly route to a particular queue within a workgroup.
   --&gt;
    &lt;input type="hidden" name="workgroup" value="&lt;%= StringUtils.escapeHTMLTags(workgroup) %&gt;"/&gt;
    &lt;input type="hidden" name="chatID" value="&lt;%= StringUtils.escapeHTMLTags(chatID) %    &gt;" /&gt;
   &lt;!-- End of Hidden Variable identifiers --&gt;
      &lt;tr&gt;
            &lt;td colspan="2" height="1%"&gt;
            &lt;br/&gt;
            &lt;%=  welcomeText %&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
          &lt;td height="1%"&gt;
            &lt;br/&gt;
          &lt;/td&gt;
        &lt;/tr&gt;

        &lt;% if (authFailed) { %&gt;
        &lt;tr valign="top"&gt;
           &lt;td class="formtext" colspan="2" height="1%" nowrap&gt;&lt;span class="error"&gt;Authentication Failed&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;% } %&gt;

        &lt;%
                   Iterator fields = workgroupForm.getFields();
                   while(fields.hasNext()){
                       hasElements = true;
                       FormField field = (FormField)fields.next();
                       String label = field.getLabel();
                       boolean required = field.isRequired();
                       String requiredStr = required ? "&amp;nbsp;&lt;span class=\"error\"&gt;*&lt;/span&gt;" : "";
                       if(!field.getType().equals(FormField.TYPE_HIDDEN)){
               %&gt;
               &lt;tr valign="top"&gt;
                 &lt;td class="formtext" height="1%" width="1%" nowrap&gt;&lt;%= label%&gt;&lt;%= requiredStr%&gt;&lt;/td&gt;&lt;td&gt;&lt;%= FormUtils.createAnswers(field, request)%&gt;&lt;/td&gt;
               &lt;/tr&gt;
               &lt;% } } %&gt;

        &lt;tr valign="top"&gt;
          &lt;td height="1%"&gt;
          &lt;!-- All workgroup defined variables --&gt;
            &lt;%
                   fields = workgroupForm.getFields();
                   while(fields.hasNext()){
                       FormField field = (FormField)fields.next();
                       if(field.getType().equals(FormField.TYPE_HIDDEN)){
             %&gt;
             &lt;%= FormUtils.createDynamicField(field, request)%&gt;
             &lt;% }} %&gt;
          &lt;!-- End of Defined Variables --&gt;

             &lt;% // Handle page location
                 if(location != null){ %&gt;
                 &lt;input type="hidden" name="location" value="&lt;%= StringUtils.escapeHTMLTags(location)%&gt;" /&gt;
             &lt;% } %&gt;
          &lt;/td&gt;
            &lt;td&gt; &lt;input type="submit" name="submitForm" value="&lt;%= startButton%&gt;"/&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;

        &lt;/tr&gt;
       &lt;/form&gt;
      &lt;/table&gt;
 &lt;div style="position:absolute;bottom:0px;right:5px"&gt;&lt;img src="getimage?image=poweredby&amp;workgroup=&lt;%= StringUtils.URLEncode(workgroup, "utf-8") %&gt;"/&gt;&lt;/div&gt;
 &lt;/body&gt;
&lt;%if(!hasElements){ %&gt;
&lt;script type="text/javascript"&gt;
    document.f.submit();
&lt;/script&gt;
  &lt;%}%&gt;
&lt;/html&gt;
</code></pre>
