// The default constructor
  public CrownCounselIndexGetList_Access() {
    String traceProp = null;
    if ((traceProp = System.getProperty(HOSTPUBLISHER_ACCESSBEAN_TRACE)) != null) {
      try {
        Class c = Class.forName(HOSTPUBLISHER_ACCESSTRACE_OBJECT);
        Method m = c.getMethod("getInstance", null);
        o = m.invoke(null, null);
        Class parmTypes[] = {String.class};
        m = c.getMethod("initTrace", parmTypes);
        Object initTraceArgs[] = {traceProp};
        BitSet tracingBS = (BitSet) m.invoke(o, initTraceArgs);
        Class parmTypes2[] = {Object.class, String.class};
        traceMethod = c.getMethod("trace", parmTypes2);
        tracing = tracingBS.get(HOSTPUBLISHER_ACCESSBEAN_TRACING);
        Class parmTypes3[] = {String.class, HttpSession.class};
        auditMethod = c.getMethod("audit", parmTypes3);
        auditing = tracingBS.get(HOSTPUBLISHER_ACCESSBEAN_AUDITING);
      } catch (Exception e) {
        // no tracing will be done
        System.err.println(
            (new Date(System.currentTimeMillis())).toString()
                + " hostpublisher.accessbean.trace="
                + traceProp
                + ", Exception="
                + e.toString());
      }
    }

    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = " CrownCounselIndexGetList_Access()";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
        System.err.println(
            (new Date(System.currentTimeMillis())).toString()
                + " traceMethod.invoke(null, traceArgs)"
                + ", Exception="
                + x.toString());
      }
    }
    inputProps = new CrownCounselIndexGetList_Properties();
    return;
  }
 private void endHereCommon() throws BeanException {
   // save EJB object handle in property
   if (ejb != null) {
     try {
       hPubAccessHandle = ejb.getHandle();
     } catch (Exception e) {
       String errMsg =
           (new Date(System.currentTimeMillis())).toString()
               + " HPS5955 "
               + this.getClass().getName()
               + ": ejb.getHandle(), ejb="
               + ejb
               + ": "
               + e.getClass().getName()
               + ": "
               + e.getMessage();
       System.err.println(errMsg);
       if (tracing == true) {
         traceArgs[0] = this;
         traceArgs[1] = errMsg;
         try {
           traceMethod.invoke(o, traceArgs);
         } catch (Exception x) {
         }
       }
       throw new BeanException(errMsg);
     }
   }
   // save ejb accessHandle and hpubLinkKey in HttpSession
   if ((oHttpServletRequest != null) && (outputProps != null)) {
     // a new HPubEjb2HttpSessionBindingListener object containing the ejb access
     // handle and hPubLinkKey for the connection is bound to the session using
     // a prefix and the ending connection state of the IO just processed.
     // This hPubLinkKey uniquely identifies the connection associated with the
     // IO chain for that HP Runtime JVM.
     // The ejb access handle is contained within the HPubEjb2HttpSessionBindingListener
     // object so that an ejb remove can be issued in the case where a session
     // timeout or session invalidation occurs for an incomplete IO chain.
     HttpSession theWebsession = oHttpServletRequest.getSession(true);
     if (theWebsession != null) {
       synchronized (theWebsession) {
         try {
           String theKey = KEY_WEBCONN + outputProps.getHPubEndChainName();
           hPubLinkKey = outputProps.getHPubLinkKey();
           theWebsession.setAttribute(
               theKey, new HPubEJB2HttpSessionBindingListener(hPubAccessHandle, hPubLinkKey));
           if (tracing == true) {
             traceArgs[0] = this;
             traceArgs[1] =
                 "theWebsession.setAttribute("
                     + theKey
                     + ",new HPubEJB2HttpSessionBindingListener("
                     + hPubAccessHandle
                     + ", "
                     + hPubLinkKey
                     + "))";
             try {
               traceMethod.invoke(o, traceArgs);
             } catch (Exception x) {
             }
           }
           if (auditing == true) {
             auditArgs[0] =
                 "\n---\nIN:"
                     + this.getClass().getName()
                     + " "
                     + theKey
                     + " "
                     + hPubAccessHandle
                     + " "
                     + hPubLinkKey
                     + " "
                     + theWebsession.getId();
             auditArgs[1] = theWebsession;
             try {
               auditMethod.invoke(o, auditArgs);
             } catch (Exception x) {
             }
           }
         } catch (Exception e) {
           hPubLinkKey = null; // set to null to force following error logic
         }
       }
     }
     // if an error occurred throw an exception to cause ejb remove to be issued.
     if ((theWebsession == null) || (hPubLinkKey == null)) {
       String errMsg =
           (new Date(System.currentTimeMillis())).toString()
               + " HPS5956 "
               + this.getClass().getName()
               + ": HttpServletRequest.getSession(true), hPubLinkKey="
               + hPubLinkKey;
       System.err.println(errMsg);
       if (tracing == true) {
         traceArgs[0] = this;
         traceArgs[1] = errMsg;
         try {
           traceMethod.invoke(o, traceArgs);
         } catch (Exception x) {
         }
       }
       throw new BeanException(errMsg);
     }
   }
   // send Event to User indicating that the Query request is complete
   RequestCompleteEvent hPubEvent = new RequestCompleteEvent(this);
   fireHPubReqCompleteEvent(hPubEvent);
   return;
 }
  /** all processing methods end up here */
  private void startHereCommon() throws BeanException {
    // try to get the linkKey if already set in input properties
    try {
      hPubLinkKey = inputProps.getHPubLinkKey();
    } catch (Exception e) {
    }

    // if running in Web environment and either the ejb access handle or
    // the linkKey are null, try to get them from the HttpSession
    if (oHttpServletRequest != null) {
      HttpSession theWebsession = oHttpServletRequest.getSession(false);
      if (theWebsession != null) {
        synchronized (theWebsession) {
          try {
            if (tracing == true) {
              traceArgs[0] = this;
              traceArgs[1] = "HttpSession.getId()=" + theWebsession.getId();
              try {
                traceMethod.invoke(o, traceArgs);
              } catch (Exception x) {
              }
            }
            String theKey = KEY_WEBCONN + inputProps.getHPubStartChainName();
            // if linkKey or access handle is null try to get it from Websession
            HPubEJB2HttpSessionBindingListener sbl =
                (HPubEJB2HttpSessionBindingListener) theWebsession.getAttribute(theKey);
            if ((hPubLinkKey == null) && (sbl != null)) {
              hPubLinkKey = sbl.getLinkKey();
              if (tracing == true) {
                traceArgs[0] = this;
                traceArgs[1] = "HttpSession.getAttribute(hPubLinkKey)=" + hPubLinkKey;
                try {
                  traceMethod.invoke(o, traceArgs);
                } catch (Exception x) {
                }
              }
              inputProps.setHPubLinkKey(hPubLinkKey);
            }
            if ((hPubAccessHandle == null) && (sbl != null)) {
              hPubAccessHandle = sbl.getEjbHandle();
              if (tracing == true) {
                traceArgs[0] = this;
                traceArgs[1] = "HttpSession.getAttribute(hPubAccessHandle)=" + hPubAccessHandle;
                try {
                  traceMethod.invoke(o, traceArgs);
                } catch (Exception x) {
                }
              }
            }
            // set the ejb handle to null before removing the Session Binding
            // Listener object
            if (auditing == true) {
              if (sbl != null)
                auditArgs[0] =
                    "\n---\nOUT:"
                        + this.getClass().getName()
                        + " "
                        + theKey
                        + " "
                        + hPubAccessHandle
                        + " "
                        + hPubLinkKey
                        + " "
                        + theWebsession.getId();
              else // error - object not found in HttpSession
              auditArgs[0] =
                    "\n---\nERR:"
                        + this.getClass().getName()
                        + " "
                        + theKey
                        + " "
                        + theWebsession.getId();

              auditArgs[1] = theWebsession;
              try {
                auditMethod.invoke(o, auditArgs);
              } catch (Exception x) {
              }
            }
            if (sbl != null) sbl.setEjbHandle(null);
            theWebsession.removeAttribute(theKey);
          } catch (IllegalStateException e) {
          }
        }
      }
    }
    // if either of required properties are still null then the ejb cannot
    // be accessed - throw an exception.
    if ((hPubAccessHandle == null) || (hPubLinkKey == null)) {
      String errMsg =
          (new Date(System.currentTimeMillis())).toString()
              + " HPS5951 "
              + this.getClass().getName()
              + ": hPubAccessHandle==null || hPubLinkKey==null";
      System.err.println(errMsg);
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = errMsg;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
      throw new BeanException(errMsg);
    } else {
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = "hPubAccessHandle=" + hPubAccessHandle + ",hPubLinkKey=" + hPubLinkKey;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
    }

    // get the EJB object from the handle
    try {
      ejb =
          (com.ibm.HostPublisher.EJB.HPubEJB2)
              javax.rmi.PortableRemoteObject.narrow(
                  hPubAccessHandle.getEJBObject(), com.ibm.HostPublisher.EJB.HPubEJB2.class);
    } catch (Exception e) {
      String errMsg =
          (new Date(System.currentTimeMillis())).toString()
              + " HPS5952 "
              + this.getClass().getName()
              + ": getEJBObject(): "
              + e.getClass().getName()
              + ": "
              + e.getMessage();
      System.err.println(errMsg);
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = errMsg;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
      throw new BeanException(errMsg);
    }
    // if ejb handle, go invoke the HPubEJB's main business method.
    if (ejb != null) {
      try {
        outputProps = (CrownCounselIndexGetList_Properties) ejb.processIO(inputProps);
        inputProps = outputProps;
        inputProps.setInitialCall(false);
      } catch (Exception e) {
        String errMsg =
            (new Date(System.currentTimeMillis())).toString()
                + " HPS5953 "
                + this.getClass().getName()
                + ": processIO("
                + inputProps.getClass().getName()
                + "): "
                + e.getClass().getName()
                + ": "
                + e.getMessage();
        System.err.println(errMsg);
        if (tracing == true) {
          traceArgs[0] = this;
          traceArgs[1] = errMsg;
          try {
            traceMethod.invoke(o, traceArgs);
          } catch (Exception x) {
          }
        }
        throw new BeanException(errMsg);
      }
    }
    endHereCommon();
    return;
  }
/** The EJB client's class */
public class CrownCounselIndexGetList_Access implements Runnable {

  // local variables used for tracing
  private static final String HOSTPUBLISHER_ACCESSBEAN_TRACE = "hostpublisher.accessbean.trace";
  private static final String HOSTPUBLISHER_ACCESSTRACE_OBJECT = "AccessEJBTrace";
  private static final int HOSTPUBLISHER_ACCESSBEAN_TRACING = 0;
  private static final int HOSTPUBLISHER_ACCESSBEAN_AUDITING = 1;
  private boolean tracing = false;
  private boolean auditing = false;
  private Method traceMethod;
  private Method auditMethod;
  private Object traceArgs[] = new Object[2];
  private Object auditArgs[] = new Object[2];
  private Object o;

  // local variables used for ejb objects
  private HPubEJB2Home ejbHome = null;
  private HPubEJB2 ejb = null;

  // zos platform does not allow ejb remove from finalize method.
  // a System property is queried to determine how ejb remove should be processed
  private String zosRuntime = System.getProperty("hostpublisher.jvm.zosruntime");

  // prefix of key used for saving access handle with HttpSessionBindingListener object.
  // start/end chain name of IO's in chain is appended to form actual key.
  // note total length of key must be <= 24 chars (required for WAS session persistence).
  // this leaves up to 16 chars for chain name.
  private static final String KEY_WEBCONN = "c.i.h.e.";

  // local copies of HttpServletRequest and HttpServletResponse
  private HttpServletRequest oHttpServletRequest = null;
  private HttpServletResponse oHttpServletResponse = null;

  // name of the Integration Object to be processed
  private static final String hPubIOName = "IntegrationObject.CrownCounselIndexGetList";

  // list of listeners for RequestCompleteEvent
  Vector listenerList = new Vector();

  // local variables for input & output Properties objects
  CrownCounselIndexGetList_Properties inputProps = null;
  CrownCounselIndexGetList_Properties outputProps = null;

  // ejb accessHandle property
  javax.ejb.Handle hPubAccessHandle = null;

  // hPubLinkKey for use with IO chains
  String hPubLinkKey = null;

  // version number of this Access bean
  String hPubAccessBeanVersion = "EJB_1.1_AccessBean";

  // The default constructor
  public CrownCounselIndexGetList_Access() {
    String traceProp = null;
    if ((traceProp = System.getProperty(HOSTPUBLISHER_ACCESSBEAN_TRACE)) != null) {
      try {
        Class c = Class.forName(HOSTPUBLISHER_ACCESSTRACE_OBJECT);
        Method m = c.getMethod("getInstance", null);
        o = m.invoke(null, null);
        Class parmTypes[] = {String.class};
        m = c.getMethod("initTrace", parmTypes);
        Object initTraceArgs[] = {traceProp};
        BitSet tracingBS = (BitSet) m.invoke(o, initTraceArgs);
        Class parmTypes2[] = {Object.class, String.class};
        traceMethod = c.getMethod("trace", parmTypes2);
        tracing = tracingBS.get(HOSTPUBLISHER_ACCESSBEAN_TRACING);
        Class parmTypes3[] = {String.class, HttpSession.class};
        auditMethod = c.getMethod("audit", parmTypes3);
        auditing = tracingBS.get(HOSTPUBLISHER_ACCESSBEAN_AUDITING);
      } catch (Exception e) {
        // no tracing will be done
        System.err.println(
            (new Date(System.currentTimeMillis())).toString()
                + " hostpublisher.accessbean.trace="
                + traceProp
                + ", Exception="
                + e.toString());
      }
    }

    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = " CrownCounselIndexGetList_Access()";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
        System.err.println(
            (new Date(System.currentTimeMillis())).toString()
                + " traceMethod.invoke(null, traceArgs)"
                + ", Exception="
                + x.toString());
      }
    }
    inputProps = new CrownCounselIndexGetList_Properties();
    return;
  }

  // Generated getters

  public java.lang.String getHPubMacroMessage() {
    if (outputProps != null) return (outputProps.getHPubMacroMessage());
    else return (inputProps.getHPubMacroMessage());
  }

  public java.lang.String getCrownCounselIndexSearchList() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchList());
    else return (inputProps.getCrownCounselIndexSearchList());
  }

  public java.lang.String getHPubEndChainName() {
    if (outputProps != null) return (outputProps.getHPubEndChainName());
    else return (inputProps.getHPubEndChainName());
  }

  public java.lang.String getSurnameOut() {
    if (outputProps != null) return (outputProps.getSurnameOut());
    else return (inputProps.getSurnameOut());
  }

  public java.lang.String[] getCrownCounselIndexSearchListCrownType() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListCrownType());
    else return (inputProps.getCrownCounselIndexSearchListCrownType());
  }

  public java.lang.String getCrownCounselIndexSearchListCrownType(int index) {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListCrownType(index));
    else return (inputProps.getCrownCounselIndexSearchListCrownType(index));
  }

  public java.lang.String getHPubXMLProperties() {
    if (outputProps != null) return (outputProps.getHPubXMLProperties());
    else return (inputProps.getHPubXMLProperties());
  }

  public java.lang.String[] getCrownCounselIndexSearchListCrownId() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListCrownId());
    else return (inputProps.getCrownCounselIndexSearchListCrownId());
  }

  public java.lang.String getCrownCounselIndexSearchListCrownId(int index) {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListCrownId(index));
    else return (inputProps.getCrownCounselIndexSearchListCrownId(index));
  }

  public java.lang.String getHPubXMLPropertiesWithoutInvoking() {
    if (outputProps != null) return (outputProps.getHPubXMLPropertiesWithoutInvoking());
    else return (inputProps.getHPubXMLPropertiesWithoutInvoking());
  }

  public java.lang.String getHPubConnectionOverrides() {
    if (outputProps != null) return (outputProps.getHPubConnectionOverrides());
    else return (inputProps.getHPubConnectionOverrides());
  }

  public java.lang.String getReturnMessage() {
    if (outputProps != null) return (outputProps.getReturnMessage());
    else return (inputProps.getReturnMessage());
  }

  public int getHPubStartType() {
    if (outputProps != null) return (outputProps.getHPubStartType());
    else return (inputProps.getHPubStartType());
  }

  public java.lang.String getHPubStartPoolName() {
    if (outputProps != null) return (outputProps.getHPubStartPoolName());
    else return (inputProps.getHPubStartPoolName());
  }

  public java.lang.Exception getHPubErrorException() {
    if (outputProps != null) return (outputProps.getHPubErrorException());
    else return (inputProps.getHPubErrorException());
  }

  public java.lang.String getHPubBeanName() {
    if (outputProps != null) return (outputProps.getHPubBeanName());
    else return (inputProps.getHPubBeanName());
  }

  public int getHPubErrorOccurred() {
    if (outputProps != null) return (outputProps.getHPubErrorOccurred());
    else return (inputProps.getHPubErrorOccurred());
  }

  public java.lang.String getHPubErrorMessage() {
    if (outputProps != null) return (outputProps.getHPubErrorMessage());
    else return (inputProps.getHPubErrorMessage());
  }

  public java.lang.String getHPubScreenState() {
    if (outputProps != null) return (outputProps.getHPubScreenState());
    else return (inputProps.getHPubScreenState());
  }

  public java.lang.String getMore() {
    if (outputProps != null) return (outputProps.getMore());
    else return (inputProps.getMore());
  }

  public java.lang.String getHPubStartChainName() {
    if (outputProps != null) return (outputProps.getHPubStartChainName());
    else return (inputProps.getHPubStartChainName());
  }

  public java.lang.String getHPubOutputParmSuffix() {
    if (outputProps != null) return (outputProps.getHPubOutputParmSuffix());
    else return (inputProps.getHPubOutputParmSuffix());
  }

  public java.lang.String[] getCrownCounselIndexSearchListHomeLocation() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListHomeLocation());
    else return (inputProps.getCrownCounselIndexSearchListHomeLocation());
  }

  public java.lang.String getCrownCounselIndexSearchListHomeLocation(int index) {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListHomeLocation(index));
    else return (inputProps.getCrownCounselIndexSearchListHomeLocation(index));
  }

  public java.lang.String[] getCrownCounselIndexSearchListHomeCourt() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListHomeCourt());
    else return (inputProps.getCrownCounselIndexSearchListHomeCourt());
  }

  public java.lang.String getCrownCounselIndexSearchListHomeCourt(int index) {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListHomeCourt(index));
    else return (inputProps.getCrownCounselIndexSearchListHomeCourt(index));
  }

  public java.lang.String getHPubLinkKey() {
    if (outputProps != null) return (outputProps.getHPubLinkKey());
    else return (inputProps.getHPubLinkKey());
  }

  public java.lang.String getHPubBeanType() {
    if (outputProps != null) return (outputProps.getHPubBeanType());
    else return (inputProps.getHPubBeanType());
  }

  public java.lang.String[] getCrownCounselIndexSearchListName() {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListName());
    else return (inputProps.getCrownCounselIndexSearchListName());
  }

  public java.lang.String getCrownCounselIndexSearchListName(int index) {
    if (outputProps != null) return (outputProps.getCrownCounselIndexSearchListName(index));
    else return (inputProps.getCrownCounselIndexSearchListName(index));
  }

  public int getHPubEndType() {
    if (outputProps != null) return (outputProps.getHPubEndType());
    else return (inputProps.getHPubEndType());
  }

  public java.lang.String getHPubIOName() {
    return new String(hPubIOName);
  }

  public java.lang.Object getHPubAccessHandle() {
    return hPubAccessHandle;
  }

  public java.lang.String getHPubAccessBeanVersion() {
    return new String(hPubAccessBeanVersion);
  }

  // Generated setters.

  public void setHPubMacroMessage(java.lang.String value) {
    inputProps.setHPubMacroMessage(value);
  }

  public void setHPubEndChainName(java.lang.String value) {
    inputProps.setHPubEndChainName(value);
  }

  public void setHPubConnectionOverrides(java.lang.String value) {
    inputProps.setHPubConnectionOverrides(value);
  }

  public void setHPubStartType(int value) {
    inputProps.setHPubStartType(value);
  }

  public void setHPubStartPoolName(java.lang.String value) {
    inputProps.setHPubStartPoolName(value);
  }

  public void setHPubScreenState(java.lang.String value) {
    inputProps.setHPubScreenState(value);
  }

  public void setHPubStartChainName(java.lang.String value) {
    inputProps.setHPubStartChainName(value);
  }

  public void setHPubLinkKey(java.lang.String value) {
    inputProps.setHPubLinkKey(value);
  }

  public void setHPubEndType(int value) {
    inputProps.setHPubEndType(value);
  }

  // Generated execution methods

  public java.lang.String getHPubXMLProperties(java.lang.String value) {
    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = "CrownCounselIndexGetList_Access.getHPubXMLProperties(String)";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
      }
    }

    inputProps.setHPubStyleSheet(value);

    try {
      startHereCommon();
    } catch (BeanException e) {
      // remove the ejb instance if handle exists
      if (ejb != null) {
        try {
          ejb.remove();
        } catch (Exception x) {
        }
        ejb = null;
      }

      // go set error fields
      setupErrorFields(e);
    }
    if (outputProps != null) return outputProps.getHPubXMLData();
    else return null;
  }

  public void setHPubAccessHandle(java.lang.Object value) {
    hPubAccessHandle = (javax.ejb.Handle) value;
  }

  /** processing method invoked from a Web environment */
  public void doHPTransaction(HttpServletRequest req, HttpServletResponse resp)
      throws BeanException {
    oHttpServletRequest = req;
    oHttpServletResponse = resp;

    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = " CrownCounselIndexGetList_Access.doHPTransaction()";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
      }
    }

    try {
      startHereCommon();
    } catch (BeanException e) {
      // remove the ejb instance if handle exists
      if (ejb != null) {
        try {
          ejb.remove();
        } catch (Exception x) {
        }
        ejb = null;
      }

      // go set error fields
      setupErrorFields(e);

      throw e; // rethrow the exception.
    }
  }

  /** processing method invoked from application */
  public void processRequest() throws BeanException {
    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = " CrownCounselIndexGetList_Access.processRequest()";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
      }
    }

    try {
      startHereCommon();
    } catch (BeanException e) {
      // remove the ejb instance if handle exists
      if (ejb != null) {
        try {
          ejb.remove();
        } catch (Exception x) {
        }
        ejb = null;
      }

      // go set error fields
      setupErrorFields(e);

      throw e;
    }
  }

  private void fixNullInputsForSOAP(CrownCounselIndexGetList_Properties fromClient) {
    // Transform "null" to null
    // Set hPubStartPoolName and hPubLinkKey to null if string < 1
    Class c = fromClient.getClass();
    java.beans.BeanInfo beanInfo = null;
    try {
      beanInfo = java.beans.Introspector.getBeanInfo(c);
    } catch (Exception e) {
    }
    java.beans.PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
    for (int i = 0; i < properties.length; i++) {
      java.beans.PropertyDescriptor property = properties[i];
      java.lang.reflect.Method readMethod = property.getReadMethod();
      java.lang.reflect.Method writeMethod = property.getWriteMethod();
      if ((readMethod != null) && (writeMethod != null)) {
        String currentvalue = new String("");
        if (readMethod.getReturnType() == currentvalue.getClass()) {
          try {
            currentvalue = (String) readMethod.invoke(fromClient, null);
          } catch (Exception e1) {
          }
          if (currentvalue != null) {
            if (currentvalue.equals("null")) {
              try {
                Object[] args1 = new Object[1];
                args1[0] = null;
                writeMethod.invoke(fromClient, args1);
              } catch (Exception e2) {
              }
            }
            if ((currentvalue.length() < 1 || currentvalue.endsWith("/null"))
                && (writeMethod.getName().indexOf("PubStartPoolName") > -1)) {
              try {
                Object[] args1 = new Object[1];
                args1[0] = "ICONEJB/null";
                writeMethod.invoke(fromClient, args1);
              } catch (Exception e2) {
              }
            }
            if ((currentvalue.length() < 1) && (writeMethod.getName().indexOf("PubLinkKey") > -1)) {
              try {
                Object[] args1 = new Object[1];
                args1[0] = null;
                writeMethod.invoke(fromClient, args1);
              } catch (Exception e2) {
              }
            }
          }
        } else {
        }
      }
    }
  }

  private void fixNullOutputsForSOAP(CrownCounselIndexGetList_Properties fromClient) {
    // Transform null to "null"
    Class c = fromClient.getClass();
    java.beans.BeanInfo beanInfo = null;
    try {
      beanInfo = java.beans.Introspector.getBeanInfo(c);
    } catch (Exception e) {
    }
    java.beans.PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();
    for (int i = 0; i < properties.length; i++) {
      java.beans.PropertyDescriptor property = properties[i];
      java.lang.reflect.Method readMethod = property.getReadMethod();
      java.lang.reflect.Method writeMethod = property.getWriteMethod();
      if ((readMethod != null) && (writeMethod != null)) {
        String currentvalue = new String("");
        if (readMethod.getReturnType() == currentvalue.getClass()) {
          try {
            currentvalue = (String) (readMethod.invoke(fromClient, null));
          } catch (java.lang.reflect.InvocationTargetException a1) // Null argument
          {
            try {
              Object[] args1 = new Object[1];
              args1[0] = new String("null");
              writeMethod.invoke(fromClient, args1);
            } catch (Exception e2) {
            }
          } catch (Exception e1) {
          }
        } else {
        }
      }
    }
  }

  public CrownCounselIndexGetList_Properties processWSRequest(
      CrownCounselIndexGetList_Properties props) throws BeanException {

    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] =
          "CrownCounselIndexGetList_Access.processWSRequest(CrownCounselIndexGetList_Properties)";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
      }
    }
    fixNullInputsForSOAP(props);

    inputProps = props;
    setHPubAccessHandleString(inputProps.getHPubAccessHandle());

    try {
      startHereCommon();
    } catch (BeanException e) {
      // remove the ejb instance if handle exists
      if (ejb != null) {
        try {
          ejb.remove();
        } catch (Exception x) {
        }
        ejb = null;
      }

      // go set error fields
      setupErrorFields(e);

      throw e;
    }
    outputProps.setHPubAccessHandle(getHPubAccessHandleString());
    fixNullOutputsForSOAP(outputProps);
    return outputProps;
  }

  private String getHPubAccessHandleString() {
    byte[] data = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream oos = null;
    try {
      oos = new ObjectOutputStream(baos);
      oos.writeObject(hPubAccessHandle);
      oos.flush();
      data = baos.toByteArray();
    } catch (IOException ioe) {
      System.out.println("Exception AccessEJBTemplate::getHPubAccessHandleString");
    }
    sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
    String encoded = encoder.encodeBuffer(data);
    return encoded;
  }

  private void setHPubAccessHandleString(String encodedHandleWithSpaces) {
    String encodedHandle = removeSpaceCharacters(encodedHandleWithSpaces);
    if ((encodedHandle == null) || (encodedHandle.length() < 5)) {
      return;
    }
    try {
      byte[] handleByteArray = null;
      sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder();
      try {
        handleByteArray = dec.decodeBuffer(encodedHandle);
      } catch (Exception e) {
        System.out.println("AccessEJBTemplate::setHPubAccessHandleString()  decoding buffer");
      }
      ;
      ByteArrayInputStream bais = new ByteArrayInputStream(handleByteArray);
      javax.ejb.Handle h1 = null;
      try {
        ObjectInputStream ois = new ObjectInputStream(bais);
        hPubAccessHandle = (javax.ejb.Handle) ois.readObject();
      } catch (Exception ioe) {
        System.out.println("Exception reading handle object");
      }
    } catch (Exception e) {
      e.printStackTrace(System.err);
      System.out.println("Exception AccessEJBTemplate::setHPubAccessHandleString()");
    }
    return;
  }

  private String removeSpaceCharacters(String inputstr) {
    String outputstr = inputstr;
    int t = outputstr.indexOf(" ");
    while (t > -1) {
      outputstr = outputstr.substring(0, t) + outputstr.substring(t + 1);
      t = outputstr.indexOf(" ");
    }
    return outputstr;
  }
  /** event driven processing methods */
  public void hPubStartPerformed(HPubStartEvent evt) {
    if (tracing == true) {
      traceArgs[0] = this;
      traceArgs[1] = "CrownCounselIndexGetList_Access.hPubStartPerformed()";
      try {
        traceMethod.invoke(o, traceArgs);
      } catch (Exception x) {
      }
    }
    Thread newThread = new Thread(this);
    newThread.start();
  }

  public void run() {
    try {
      startHereCommon();
    } catch (BeanException e) {
      // remove the ejb instance if handle exists
      if (ejb != null) {
        try {
          ejb.remove();
        } catch (Exception x) {
        }
        ejb = null;
      }

      // go set error fields
      setupErrorFields(e);
    }
  }

  public void addHPubReqCompleteListener(HPubReqCompleteListener listenerToAdd) {
    listenerList.addElement(listenerToAdd);
  }

  public void removeHPubReqCompleteListener(HPubReqCompleteListener listenerToRemove) {
    listenerList.removeElement(listenerToRemove);
  }

  protected void fireHPubReqCompleteEvent(RequestCompleteEvent evt) {
    Vector currentListenerList = null;

    synchronized (this) {
      currentListenerList = (Vector) listenerList.clone();
    }
    for (int i = 0; i < currentListenerList.size(); i++) {
      HPubReqCompleteListener listener = (HPubReqCompleteListener) currentListenerList.elementAt(i);
      listener.hPubReqComplete(evt);
    }
  }

  /** all processing methods end up here */
  private void startHereCommon() throws BeanException {
    // try to get the linkKey if already set in input properties
    try {
      hPubLinkKey = inputProps.getHPubLinkKey();
    } catch (Exception e) {
    }

    // if running in Web environment and either the ejb access handle or
    // the linkKey are null, try to get them from the HttpSession
    if (oHttpServletRequest != null) {
      HttpSession theWebsession = oHttpServletRequest.getSession(false);
      if (theWebsession != null) {
        synchronized (theWebsession) {
          try {
            if (tracing == true) {
              traceArgs[0] = this;
              traceArgs[1] = "HttpSession.getId()=" + theWebsession.getId();
              try {
                traceMethod.invoke(o, traceArgs);
              } catch (Exception x) {
              }
            }
            String theKey = KEY_WEBCONN + inputProps.getHPubStartChainName();
            // if linkKey or access handle is null try to get it from Websession
            HPubEJB2HttpSessionBindingListener sbl =
                (HPubEJB2HttpSessionBindingListener) theWebsession.getAttribute(theKey);
            if ((hPubLinkKey == null) && (sbl != null)) {
              hPubLinkKey = sbl.getLinkKey();
              if (tracing == true) {
                traceArgs[0] = this;
                traceArgs[1] = "HttpSession.getAttribute(hPubLinkKey)=" + hPubLinkKey;
                try {
                  traceMethod.invoke(o, traceArgs);
                } catch (Exception x) {
                }
              }
              inputProps.setHPubLinkKey(hPubLinkKey);
            }
            if ((hPubAccessHandle == null) && (sbl != null)) {
              hPubAccessHandle = sbl.getEjbHandle();
              if (tracing == true) {
                traceArgs[0] = this;
                traceArgs[1] = "HttpSession.getAttribute(hPubAccessHandle)=" + hPubAccessHandle;
                try {
                  traceMethod.invoke(o, traceArgs);
                } catch (Exception x) {
                }
              }
            }
            // set the ejb handle to null before removing the Session Binding
            // Listener object
            if (auditing == true) {
              if (sbl != null)
                auditArgs[0] =
                    "\n---\nOUT:"
                        + this.getClass().getName()
                        + " "
                        + theKey
                        + " "
                        + hPubAccessHandle
                        + " "
                        + hPubLinkKey
                        + " "
                        + theWebsession.getId();
              else // error - object not found in HttpSession
              auditArgs[0] =
                    "\n---\nERR:"
                        + this.getClass().getName()
                        + " "
                        + theKey
                        + " "
                        + theWebsession.getId();

              auditArgs[1] = theWebsession;
              try {
                auditMethod.invoke(o, auditArgs);
              } catch (Exception x) {
              }
            }
            if (sbl != null) sbl.setEjbHandle(null);
            theWebsession.removeAttribute(theKey);
          } catch (IllegalStateException e) {
          }
        }
      }
    }
    // if either of required properties are still null then the ejb cannot
    // be accessed - throw an exception.
    if ((hPubAccessHandle == null) || (hPubLinkKey == null)) {
      String errMsg =
          (new Date(System.currentTimeMillis())).toString()
              + " HPS5951 "
              + this.getClass().getName()
              + ": hPubAccessHandle==null || hPubLinkKey==null";
      System.err.println(errMsg);
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = errMsg;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
      throw new BeanException(errMsg);
    } else {
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = "hPubAccessHandle=" + hPubAccessHandle + ",hPubLinkKey=" + hPubLinkKey;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
    }

    // get the EJB object from the handle
    try {
      ejb =
          (com.ibm.HostPublisher.EJB.HPubEJB2)
              javax.rmi.PortableRemoteObject.narrow(
                  hPubAccessHandle.getEJBObject(), com.ibm.HostPublisher.EJB.HPubEJB2.class);
    } catch (Exception e) {
      String errMsg =
          (new Date(System.currentTimeMillis())).toString()
              + " HPS5952 "
              + this.getClass().getName()
              + ": getEJBObject(): "
              + e.getClass().getName()
              + ": "
              + e.getMessage();
      System.err.println(errMsg);
      if (tracing == true) {
        traceArgs[0] = this;
        traceArgs[1] = errMsg;
        try {
          traceMethod.invoke(o, traceArgs);
        } catch (Exception x) {
        }
      }
      throw new BeanException(errMsg);
    }
    // if ejb handle, go invoke the HPubEJB's main business method.
    if (ejb != null) {
      try {
        outputProps = (CrownCounselIndexGetList_Properties) ejb.processIO(inputProps);
        inputProps = outputProps;
        inputProps.setInitialCall(false);
      } catch (Exception e) {
        String errMsg =
            (new Date(System.currentTimeMillis())).toString()
                + " HPS5953 "
                + this.getClass().getName()
                + ": processIO("
                + inputProps.getClass().getName()
                + "): "
                + e.getClass().getName()
                + ": "
                + e.getMessage();
        System.err.println(errMsg);
        if (tracing == true) {
          traceArgs[0] = this;
          traceArgs[1] = errMsg;
          try {
            traceMethod.invoke(o, traceArgs);
          } catch (Exception x) {
          }
        }
        throw new BeanException(errMsg);
      }
    }
    endHereCommon();
    return;
  }

  private void endHereCommon() throws BeanException {
    // save EJB object handle in property
    if (ejb != null) {
      try {
        hPubAccessHandle = ejb.getHandle();
      } catch (Exception e) {
        String errMsg =
            (new Date(System.currentTimeMillis())).toString()
                + " HPS5955 "
                + this.getClass().getName()
                + ": ejb.getHandle(), ejb="
                + ejb
                + ": "
                + e.getClass().getName()
                + ": "
                + e.getMessage();
        System.err.println(errMsg);
        if (tracing == true) {
          traceArgs[0] = this;
          traceArgs[1] = errMsg;
          try {
            traceMethod.invoke(o, traceArgs);
          } catch (Exception x) {
          }
        }
        throw new BeanException(errMsg);
      }
    }
    // save ejb accessHandle and hpubLinkKey in HttpSession
    if ((oHttpServletRequest != null) && (outputProps != null)) {
      // a new HPubEjb2HttpSessionBindingListener object containing the ejb access
      // handle and hPubLinkKey for the connection is bound to the session using
      // a prefix and the ending connection state of the IO just processed.
      // This hPubLinkKey uniquely identifies the connection associated with the
      // IO chain for that HP Runtime JVM.
      // The ejb access handle is contained within the HPubEjb2HttpSessionBindingListener
      // object so that an ejb remove can be issued in the case where a session
      // timeout or session invalidation occurs for an incomplete IO chain.
      HttpSession theWebsession = oHttpServletRequest.getSession(true);
      if (theWebsession != null) {
        synchronized (theWebsession) {
          try {
            String theKey = KEY_WEBCONN + outputProps.getHPubEndChainName();
            hPubLinkKey = outputProps.getHPubLinkKey();
            theWebsession.setAttribute(
                theKey, new HPubEJB2HttpSessionBindingListener(hPubAccessHandle, hPubLinkKey));
            if (tracing == true) {
              traceArgs[0] = this;
              traceArgs[1] =
                  "theWebsession.setAttribute("
                      + theKey
                      + ",new HPubEJB2HttpSessionBindingListener("
                      + hPubAccessHandle
                      + ", "
                      + hPubLinkKey
                      + "))";
              try {
                traceMethod.invoke(o, traceArgs);
              } catch (Exception x) {
              }
            }
            if (auditing == true) {
              auditArgs[0] =
                  "\n---\nIN:"
                      + this.getClass().getName()
                      + " "
                      + theKey
                      + " "
                      + hPubAccessHandle
                      + " "
                      + hPubLinkKey
                      + " "
                      + theWebsession.getId();
              auditArgs[1] = theWebsession;
              try {
                auditMethod.invoke(o, auditArgs);
              } catch (Exception x) {
              }
            }
          } catch (Exception e) {
            hPubLinkKey = null; // set to null to force following error logic
          }
        }
      }
      // if an error occurred throw an exception to cause ejb remove to be issued.
      if ((theWebsession == null) || (hPubLinkKey == null)) {
        String errMsg =
            (new Date(System.currentTimeMillis())).toString()
                + " HPS5956 "
                + this.getClass().getName()
                + ": HttpServletRequest.getSession(true), hPubLinkKey="
                + hPubLinkKey;
        System.err.println(errMsg);
        if (tracing == true) {
          traceArgs[0] = this;
          traceArgs[1] = errMsg;
          try {
            traceMethod.invoke(o, traceArgs);
          } catch (Exception x) {
          }
        }
        throw new BeanException(errMsg);
      }
    }
    // send Event to User indicating that the Query request is complete
    RequestCompleteEvent hPubEvent = new RequestCompleteEvent(this);
    fireHPubReqCompleteEvent(hPubEvent);
    return;
  }

  protected void setupErrorFields(Exception oException) {
    // if hPubErrorOccurred not set by actual driving of Integration
    // Object, then set error fields in output Properties object
    // if it exists, otherwise set them in input Properties object.
    if (this.getHPubErrorOccurred() == 0) {
      if (outputProps != null) {
        outputProps.setHPubErrorOccurred(1);
        outputProps.setHPubErrorException(oException);
        if (oException.getMessage() != null)
          outputProps.setHPubErrorMessage(oException.getMessage());
      } else {
        inputProps.setHPubErrorOccurred(1);
        inputProps.setHPubErrorException(oException);
        if (oException.getMessage() != null)
          inputProps.setHPubErrorMessage(oException.getMessage());
      }
    }
  }
}