1 Reply Latest reply on May 13, 2010 4:09 PM by deanhiller2000

    random IllegalArgumentExcpetion with selectItems - convertEntity

    evans

      I get an illegalArgumentException with my selectItems / convertEntity about 5% of the time when submitting the drop down box. I do not know how to reproduce it consistently. It can happen anytime during your session. I am using seam 2.1, jdk 1.5, and jboss 5. Below is the xhtml and the component that fills the skus list. Could someone please try to help? It is a very annoying problem and I can't figure out the cause.



      <div class="productinfo">            
                                      
                                      <h2>#{currentProduct.shortDescription}</h2>                        
                                      <div class="description">
                                              <h:outputText value="#{currentProduct.longDescription}" />
                                      </div>
                                      <br/>
                                      <h:selectOneMenu id="selectSku" value="#{shoppingCart.newSku}">
                                        <s:selectItems value="#{skus}" var="sku" label="#{skuAction.getFormattedSkuPrice(sku)} : #{sku.skuCode}"/>
                                                                 <s:convertEntity /> 
                                                              </h:selectOneMenu>                                
                                      Qty: <h:inputText size="3" value="#{shoppingCart.newQuantity}"/>
                                  
                              </div>   
      
      package com.acquitygroup.acquityondemand.session.catalog;
      
      import javax.ejb.Stateless;
      import javax.persistence.EntityManager;
      import javax.persistence.PersistenceContext;
      
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.web.RequestParameter;
      import org.jboss.seam.log.Log;
      import static org.jboss.seam.ScopeType.PAGE;
      import static org.jboss.seam.ScopeType.SESSION;
      
      import com.acquitygroup.acquityondemand.entity.*;
      
      import java.util.List;
      import java.util.ArrayList;
      
      @Stateless
      @Name("productAction")
      public class ProductActionBean implements ProductAction
      {
          @Logger private Log log;
          
          @PersistenceContext
          private EntityManager em;    
          
          @In(required=true) Site currentSite;
          
          @Out(required=false, scope=PAGE)
          private List<Product> productList;
          
          @In(required=false) @Out(required=false, scope=PAGE)
              Category theCategory;
          
          @Out(required=false)
          Product currentProduct;
          
          @Out(required=false, scope=SESSION)
          List<Sku> skus;
          
          Long productId;
          
          String siteId;
          
          @RequestParameter("catId")
              Long catId;
          
          public void setCurrentProductAndSkus() {
              currentProduct = em.find(Product.class, productId);
              skus = currentProduct.getSkuList();
          }
          
      



      And the exception:


      Caused by: java.lang.IllegalArgumentException
              at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:179)
              at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:61)
              at javax.faces.component.SelectUtils.matchValue(SelectUtils.java:82)
              at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:144)
              at javax.faces.component.UIInput.validate(UIInput.java:875)
              at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
              at javax.faces.component.UIInput.processValidators(UIInput.java:672)
              at javax.faces.component.UIForm.processValidators(UIForm.java:235)
              at org.ajax4jsf.component.AjaxViewRoot$3.invokeContextCallback(AjaxViewRoot.java:439)
              at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:238)
        

        • 1. Re: random IllegalArgumentExcpetion with selectItems - convertEntity
          deanhiller2000

          This happens when you get a list of items in one short conversation and then try to select an item and the request is in a new conversation(ie. different entityManager).  There is always conversations going on, so try to do a long running conversation and see if that helps.


          I know I just ran into this myself and searched for a solution but then remembered what the answer was and moved to long running conversation and it fixed this problem.