Uploaded image for project: 'Tools (JBoss Tools)'
  1. Tools (JBoss Tools)
  2. JBIDE-12609

NPE when validating EL which uses java.util.Map

XMLWordPrintable

      1. Create JSF 2 KickStart project
      2. Modify User.java:

      package demo;
      
      import java.util.Collection;
      import java.util.HashMap;
      import java.util.Map;
      
      import javax.faces.bean.ManagedBean;
      import javax.faces.bean.SessionScoped;
      
      @ManagedBean(name="user")
      @SessionScoped
      public class User {
      	private Map<String, User> users = new HashMap<String, User>();
      	private Map<String, Collection> list = new HashMap<String, Collection>();
      
      	private String name;
      
      	public User() {
      	}
      
      	public String getName() {
      		return name;
      	}
      
      	public void setName(String name) {
      		this.name = name;
      	}
      
      	public String sayHello() {
      		return "greeting";
      	}
      
      	public Map<String, User> getUsers() {
      		return users;
      	}
      
      	public void setUsers(Map<String, User> users) {
      		this.users = users;
      	}
      
      	public Map<String, Collection> getList() {
      		return list;
      	}
      
      	public void setList(Map<String, Collection> list) {
      		this.list = list;
      	}
      }
      

      3. Open inputname.xhtml
      4. Add <ui:param name="group" value="#

      {user}

      " /> inside <ui:composition> (line #9)
      5. Save the file.
      6. Open common.xhtml
      7. Add <h:outputText value="#

      {group.users['admin'].nam}

      " />
      8. See the log:

      Caused by: java.lang.NullPointerException
      	at org.jboss.tools.jst.web.kb.internal.validation.ELValidator.validateElOperand(ELValidator.java:493)
      	at org.jboss.tools.jst.web.kb.internal.validation.ELValidator.validateELExpression(ELValidator.java:350)
      	at org.jboss.tools.jst.web.kb.internal.validation.ELValidator.validateEL(ELValidator.java:325)
      	at org.jboss.tools.jst.web.kb.internal.validation.ELValidator.validate(ELValidator.java:270)
      	at org.jboss.tools.common.validation.AsYouTypeValidatorManager.validate(AsYouTypeValidatorManager.java:174)
      	... 10 more
      

      9. Press Ctrl and move the mouse over ['admin']
      10. See the log:

      java.lang.NullPointerException
      	at org.jboss.tools.common.el.core.resolver.ELSegmentImpl$1.getStartPosition(ELSegmentImpl.java:63)
      	at org.jboss.tools.common.el.core.resolver.ELResolutionImpl.findSegmentByOffset(ELResolutionImpl.java:94)
      	at org.jboss.tools.jst.text.ext.hyperlink.ELHyperlinkDetector.detectHyperlinks(ELHyperlinkDetector.java:61)
      	at org.eclipse.ui.texteditor.HyperlinkDetectorRegistry$HyperlinkDetectorDelegate.detectHyperlinks(HyperlinkDetectorRegistry.java:80)
      	at org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:286)
      	at org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:258)
      	at org.eclipse.jface.text.hyperlink.HyperlinkManager.mouseMove(HyperlinkManager.java:462)
      	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:212)
      ...
      

      11. Add <h:outputText value="#

      {group.users['admin'].name}

      " />
      12. Try Ctrl+Click on name. java.util.Iterator is open instead of User.getName()

            vrubezhny Victor Rubezhny (Inactive)
            alexeykazakov Alexey Kazakov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: