Java JSF Beans - исключение Nullpointer - PullRequest
0 голосов
/ 13 апреля 2011

Для школы я делаю этот сайт, похожий на твиттер. Теперь у меня есть исключение nullpointer для более 2 дней. Мне нужна помощь по следующей ошибке:

java.lang.NullPointerException

java.lang.NullPointerException в javassist.util.proxy.RuntimeSupport $ DefaultMethodHandler.invoke (RuntimeSupport.java:37) в org.javassist.tmp.java.lang.Object _ $$ _ javassist_587.findAll (Object _ $$ _ javassist_587.java) в bean.KwetterBean.Followers (KwetterBean.java:218) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в org.jboss.weld.util.reflection.SecureReflections $ 13.work (SecureReflections.java:304) в org.jboss.weld.util.reflection.SecureReflectionAccess.run (SecureReflectionAccess.java:54) в org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation (SecureReflectionAccess.java:163) в org.jboss.weld.util.reflection.SecureReflections.invoke (SecureReflections.java:298) в org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke (ClientProxyMethodHandler.java:113) в org.jboss.weld.util.CleanableMethodHandler.invoke (CleanableMethodHandler.java:43) в bean.KwetterBean _ $$ _ javassist_593.Followers (KwetterBean _ $$ _ javassist_593.java) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в javax.el.BeanELResolver.invokeMethod (BeanELResolver.java:737) в javax.el.BeanELResolver.invoke (BeanELResolver.java:467) в javax.el.CompositeELResolver.invoke (CompositeELResolver.java:246) в com.sun.el.parser.AstValue.getValue (AstValue.java:111) в com.sun.el.parser.AstValue.getValue (AstValue.java:163) в com.sun.el.ValueExpressionImpl.getValue (ValueExpressionImpl.java:219) в org.jboss.weld.el.WeldValueExpression.getValue (WeldValueExpression.java:71) в com.sun.faces.facelets.el.ELText $ ELTextVariable.writeText (ELText.java:217) в com.sun.faces.facelets.compiler.TextInstruction.write (TextInstruction.java:78) в com.sun.faces.facelets.compiler.UIInstructions.encodeBegin (UIInstructions.java:75) в com.sun.faces.facelets.compiler.UILeaf.encodeAll (UILeaf.java:176) в javax.faces.component.UIComponent.encodeAll (UIComponent.java:1616) в javax.faces.component.UIComponent.encodeAll (UIComponent.java:1616) в com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView (FaceletViewHandlingStrategy.java:380) в com.sun.faces.application.view.MultiViewHandler.renderView (MultiViewHandler.java:126) в javax.faces.application.ViewHandlerWrapper.renderView (ViewHandlerWrapper.java:273) в com.sun.faces.lifecycle.RenderResponsePhase.execute (RenderResponsePhase.java:127) в com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) в com.sun.faces.lifecycle.LifecycleImpl.render (LifecycleImpl.java:139) в javax.faces.webapp.FacesServlet.service (FacesServlet.java:313) в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1523) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:279) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:188) в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:641) в com.sun.enterprise.web.WebPipeline.invoke (WebPipeline.java:97) вcom.sun.enterprise.web.PESessionLockingStandardPipeline.invoke (PESessionLockingStandardPipeline.java:85) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:185) в org.aperservice.cat.CoyoteAdapter.java:325) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:226) в com.sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:165) в com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:791) в com.sun.grizzly.http.ProcessorTask.doProcess (ProcessorTask.java:693) в com.sun.grizzly.http.ProcessorTasor.process (.java: 954) по адресу com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:170) по адресу com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:135) по адресу com.sun.grizzlyin.выполнить (DefaultProtocolChain.java:102) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:88) в com.sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java:76) по адресу com.sun.grizzly..sun.grizzly.ContextTask.run (ContextTask.java:69) в com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:330) в com.sun.grizzly.util.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:309) на java.lang.Thread.run (Thread.java:619)

Теперь участвуют классы:

KwetterBean.java

/ * * Чтобы изменить этот шаблон, выберите Инструменты |Шаблоны * и откройте шаблон в редакторе.* / package bean;

import domain. *;импорт java.io.Serializable;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Comparator;импорт java.util.Date;import java.util.HashMap;импорт java.util.Iterator;import java.util.LinkedHashMap;import java.util.LinkedList;import java.util.List;импорт java.util.Map;import javax.ejb.EJB;import javax.enterprise.context.SessionScoped;import javax.inject.Named;

import javax.faces.bean.ManagedBean;

import javax.faces.context.FacesContext;import javax.faces.event.AjaxBehaviorEvent;import javax.inject.Inject;

служба импорта .IUserService;

/ ** * * @author Julian * / @Named @ManagedBean @SessionScoped открытый класс KwetterBean реализует Serializable {

// DATA
@Inject    private IUserService uService;
private User user;
private String newTweet;
private int newTweetLength;
private String twitterFilter;
private String trend = "";

// PROPERTIES
public int getnewTweetLength() {
    return newTweetLength;
}

public User getUser() {
    if (user == null) {
        //user = new User("test", "test", "test");
        user = uService.find(0);
    }
    return user;
}

public String getNewTweet() {
    return newTweet;
}

public void setNewTweet(String newTweet) {
    this.newTweet = newTweet;
}

public void LimitTweetLength(AjaxBehaviorEvent

событие) {newTweetLength = newTweet.length ();}

public String getTwitterFilter() {
    return twitterFilter;
}

public void setTwitterFilter(String twitterFilter)

{this.twitterFilter = twitterFilter;}

public Collection<Tweet> getMentioned() {
    List<Tweet> tweets = new ArrayList<Tweet>();
    for (User u : uService.findAll()) {
        for (Tweet t : u.getTweets()) {
            String[] words = t.getTweet().split(" ");
            for (String word : words) {
                if (word.equals("@" + user.getName())) {
                    tweets.add(t);
                }
            }
        }
    }
    // Custom comparator
    Collections.sort(tweets, new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {
            Tweet p1 = (Tweet) o1;
            Tweet p2 = (Tweet) o2;
            return p2.getDatum().compareTo(p1.getDatum());
        }
    });
    return tweets;
}

public void setTrend(String trend)
{
    this.trend = trend;
}

public Collection<Tweet> getTrendTimeLine() {
    List<Tweet> trendTweets = new ArrayList<Tweet>();
    for (User u : uService.findAll()) {
        for (Tweet t : u.getTweets()) {
            String[] words = t.getTweet().split(" ");
            for (String word : words) {
                if(word.equals(trend))
                    trendTweets.add(t);
            }
        }
    }
    // Custom comparator
    Collections.sort(trendTweets, new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {
            Tweet p1 = (Tweet) o1;
            Tweet p2 = (Tweet) o2;
            return p2.getDatum().compareTo(p1.getDatum());
        }
    });
    return trendTweets;
}

public List<String> getTrends() {
    List<String> templist = new ArrayList<String>();
    HashMap<String, Integer> trends = new HashMap<String,

Integer> ();for (Пользователь u: uService.findAll ()) {for (Tweet t: u.getTweets ()) {String [] words = t.getTweet (). split ("");for (Строка word: words) {if (word.startsWith ("#")) {if (trend.containsKey (word)) {trend.put (word, trend.get (word) + 1);} else {trend.put (word, 1);}}}}} trend = (HashMap) sortByValue (trend);Итератор testiter = trend.keySet (). Iterator ();while (testiter.hasNext ()) {templist.add ((String) testiter.next ());} if (templist.size () <5) вернуть templist; </p>

    return templist.subList(0, 5);
}

public Collection<Tweet> getTimelineTweets() {
    if(!trend.isEmpty())
        return getTrendTimeLine();
    List<Tweet> tweets = new ArrayList<Tweet>();
    tweets.addAll(user.getTweets());
    for (User following : user.getFollowing()) {
        tweets.addAll(following.getTweets());
    }

    if (twitterFilter != null && twitterFilter.length() > 0) {
        Collection<Tweet> filteredTweets = new

ArrayList ();for (Tweet t: твиты) {if (t.getTweet (). indexOf (twitterFilter)> -1) {FilterTweets.add (t);}} return filterTweets;} // Пользовательский компаратор Collections.sort (твиты, новый Comparator () {

        @Override
        public int compare(Object o1, Object o2) {
            Tweet p1 = (Tweet) o1;
            Tweet p2 = (Tweet) o2;
            return p2.getDatum().compareTo(p1.getDatum());
        }
    });
    return tweets;
}

// METHODS
public void setUser(String name) {
    List<User> temp = uService.findAll();
    for (User u : temp) {
        if (u.getName().equals(name)) {
            this.user = u;
        }
    }
}

public void submitTweet() {
    if (newTweet != null && newTweet.length() > 0) {
        Tweet tweet = new Tweet(newTweet, new Date(), "PC");
        user.addTweet(newTweet);
        newTweet = "";
        newTweetLength = 0;
    }
}

public Collection<User> Followers(User user) {
    List<User> tempUserList = new ArrayList<User>();
    Iterator<User> iterator = uService.findAll().iterator();
    while (iterator.hasNext()) {
        User tempUser = iterator.next();
        if (tempUser.getFollowing().contains(user))

{ tempUserList.add (tempUser); } } return tempUserList; }

public String viewUser(User user) {
    trend = "";
    this.user = user;
    return "index.xhtml";
}

public List<String> getAllUsers() {
    List<String> tempUserList = new ArrayList<String>();
    Iterator<User> iterator = uService.findAll().iterator();
    while (iterator.hasNext()) {
        tempUserList.add(iterator.next().getName());
    }
    return tempUserList;
}

public String Login() {
    return "login.xhtml";
}

public String Logout() {
    return "index.xhtml";
}

private static Map sortByValue(Map map) {
    List list = new LinkedList(map.entrySet());
    Collections.sort(list, new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {
            return ((Comparable) ((Map.Entry)

(o2)). ПолучитьЗначение ()). CompareTo (((Map.Entry) (O1)) GetValue ()). } }); * * Тысяча сорок две

    Map result = new LinkedHashMap();
    for (Iterator it = list.iterator(); it.hasNext();) {
        Map.Entry entry = (Map.Entry) it.next();
        result.put(entry.getKey(), entry.getValue());
    }
    return result;
} }

UserServiceJPA.java

/ * * Чтобы изменить этот шаблон, выберите Сервис | Шаблоны * и открыть Шаблон в редакторе. * /

пакет услуг;

import domain.User; Импортировать java.util.ArrayList; Импортировать java.util.List; Импортировать javax.ejb.Stateful; Импортировать javax.enterprise.inject.Alternative; Импортировать javax.persistence.EntityManager; Импортировать javax.persistence.PersistenceContext; import javax.persistence.TypedQuery;

/ ** * * @author Джулиан * / @Stateful @ Альтернативный публичный класс UserServiceJPA реализует IUserService {

@PersistenceContext(unitName="Kwetter")
private EntityManager em;

@Override
public int count() {
    throw new UnsupportedOperationException("Not

поддерживается пока. "); }

public UserServiceJPA() {

    initUsers();
}

public void initUsers(){
    User u1 = new User("Hans","http","geboren 1");
    User u2 = new User("Frank","httpF","geboren 2");
    User u3 = new User("Tom","httpT","geboren 3");
    User u4 = new User("Sjaak","httpS","geboren 4");

    this.create(u1);
    this.create(u2);
    this.create(u3);
    this.create(u4);
}

@Override
public void create(User user) {
    em.persist(user);
}

@Override
public void edit(User user) {
    User user2 = new User();
    user2 = em.find(User.class, user.getId());
    user2.setFollowing(user.getFollowing());
    user2.setTweets(user.getTweets());
}

@Override
public User find(int id) {
    User user1 = new User();        
    user1 = em.find(User.class, (long)id);
    return user1;
}

@Override
public List<User> findAll() {
    List<User> users = new ArrayList();

    TypedQuery<User> query = em.createQuery("select u From User u",

User.class); for (Пользователь user1: query.getResultList ()) { users.add (user1); }

    return users;
}

@Override
public void remove(User user) {
    em.remove(user);
}

}

В этом вышеприведенном классе я использую init только один раз, так что пользователи находятся в базе данных, но он не создает пользователей в базе данных, но создает таблицы.

Я надеюсь, что кто-нибудь покажет мне, где произошла ошибка, потому что я действительно не понимаю, что происходит.

Заранее спасибо.

Новая ошибка:

org.jboss.weld.exceptions.CreationException: WELD-000079 Не удалось найти EJB в JNDI: класс org.javassist.tmp.java.io.Serializable _ $$ _ javassist_633 в org.jboss.weld.bean.SessionBean.create (SessionBean.java:315) в org.jboss.weld.context.DependentContext.get (DependentContext.java:62) в org.jboss.weld.manager.BeanManagerImpl.getReference (BeanManagerImpl.java:709) в org.jboss.weld.manager.BeanManagerImpl.getReference (BeanManagerImpl.java:771) в org.jboss.weld.manager.BeanManagerImpl.getInjectableReference (BeanManagerImpl.java:794) в org.jboss.weld.injection.FieldInjectionPoint.inject (FieldInjectionPoint.java:108) в org.jboss.weld.util.Beans.injectBoundFields (Beans.java:790) в org.jboss.weld.util.Beans.injectFieldsAndInitializers (Beans.java:802) в org.jboss.weld.bean.ManagedBean $ ManagedBeanInjectionTarget $ 1 $ 1.proceed (ManagedBean.java:177) в org.glassfish.weld.services.InjectionServicesImpl.aroundInject (InjectionServicesImpl.java:130) в org.jboss.weld.injection.InjectionContextImpl.run (InjectionContextImpl.java:47) в org.jboss.weld.bean.ManagedBean $ ManagedBeanInjectionTarget $ 1.work (ManagedBean.java:171) в org.jboss.weld.bean.ManagedBean $ FixInjectionPoint.run (ManagedBean.java:142) в org.jboss.weld.bean.ManagedBean $ ManagedBeanInjectionTarget.inject (ManagedBean.java:165) в org.jboss.weld.bean.ManagedBean.create (ManagedBean.java:332) в org.jboss.weld.context.AbstractMapContext.get (AbstractMapContext.java:112) в org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance (ClientProxyMethodHandler.java:143) в org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke (ClientProxyMethodHandler.java:100) в org.jboss.weld.util.CleanableMethodHandler.invoke (CleanableMethodHandler.java:43) в bean.KwetterBean _ $$ _ javassist_644.getUser (KwetterBean _ $$ _ javassist_644.java) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в javax.el.BeanELResolver.getValue (BeanELResolver.java:302) в javax.el.CompositeELResolver.getValue (CompositeELResolver.java:175)на com.sun.faces.el.FacesCompositeELResolver.getValue (FacesCompositeELResolver.java:72) на com.sun.el.parser.AstValue.getValue (AstValue.java:116) на com.sun.el.parser.AstValue.Value.get(AstValue.java:163) в com.sun.el.ValueExpressionImpl.getValue (ValueExpressionImpl.java:219) в org.jboss.weld.el.WeldValueExpression.getValue (WeldValueExpression.java:71) в com.sun.face.facelets.el.ELText $ ELTextVariable.writeText (ELText.java:217) в com.sun.faces.facelets.el.ELText $ ELTextComposite.writeText (ELText.java:141) в com.sun.faces.facelets.compiler.TextInstruction.write (TextInstruction.java:78) в com.sun.faces.facelets.compiler.UIInstructions.encodeBegin (UIInstructions.java:75) в com.sun.faces.facelets.compiler.UILeaf.encodeAll (UILeaf.java:176) на javax.faces.component.UIComponent.encodeAll (UIComponent.java:1616) на javax.faces.component.UIComponent.encodeAll (UIComponent.java:1616) на com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)в com.sun.faces.application.view.MultiViewHandler.renderView (MultiViewHandler.java:126) в javax.faces.application.ViewHandlerWrapper.renderView (ViewHandlerWrapper.java:273) в com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127) на com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) на com.sun.faces.lifecycle.LifecycleImpl.render (LifecycleImpl.java:139) на javax.faces.webapp.FacesServlet.service (FacesServlet.java:313) в org.apache.catalina.core.StandardWrapper.service (StandardWrapper.java:1523) в org.apache.catalina.core.StandardWrapperValve.invoke (Standard)в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:188) в org.apache.catalina.core.StandardPipeline.invoke (StandardPipeline.java:641) в com.sun.enterprise.web.voebline(WebPipeline.java:97) на com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke (PESessionLockingStandardPipeline.java:85) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:185) в org.apache.catalina.connector.CoyoteAdapter.doService (CoyoteAdapter.java:325) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:6).sun.enterprise.v3.services.impl.ContainerMapper.service (ContainerMapper.java:165) на com.sun.grizzly.http.ProcessorTask.invokeAdapter (ProcessorTask.java:791) на com.sun.grizzly.http.ProcessorTask..doProcess (ProcessorTask.java:693) на com.sun.grizzly.http.ProcessorTask.process (ProcessorTask.java:954) на com.sun.grizzly.http.DefaultProtocolFilter.execute (DefaultProtocolFilter.java:170) на ком.sun.grizzly.DefaultProtocolChain.executeProtocolFilter (DefaultProtocolChain.java:135) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain.java:102) в com.sun.grizzly.DefaultProtocolChain.execute (DefaultProtocolChain)..sun.grizzly.http.HttpProtocolChain.execute (HttpProtocolChain.java:76) в com.sun.grizzly.ProtocolChainContextTask.doCall (ProtocolChainContextTask.java: 53) на com.sun.grizzly.SelectionKeyContextTask.call (SelectionKeyContextTask.java:57) на com.sun.grizzly.ContextTask.run (ContextTask.java:69) на com.sun.grizzly.util.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:330) в com.sun.grizzly.util.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:309) в java.lang.Thread.run (Thread.java:619) Причина: java.lang.IllegalStateException: Ошибка при разрешении ссылки на объект сеанса для службы класса имен ejb. UserServiceJPA и jndi name java: global / Kwetter _-_ Julian / UserServiceJPA! service.IUserService в org.glassfish.weld.services.EjbServicesImpl.jsjjjj7) в org.jboss.weld.bean.SessionBean.createReference (SessionBean.java:422)в org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler. (EnterpriseBeanProxyMethodHandler.java:76) в org.jboss.weld.bean.SessionBean.create (SessionBean.java:298) ... еще 68 причин, вызванных.CommunicationException: коммуникационное исключение для SerialContext [Корневым исключением является java.lang.reflect.UndeclaredThrowableException] в com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:461) в javax.naming.InitialContext.lookup.java: 392) на javax.naming.InitialContext.lookup (InitialContext.java:392) на org.glassfish.weld.services.EjbServicesImpl.resolveEjb (EjbServicesImpl.java:110) ... еще 71 причина: java.langИсключение: 432) ... еще 74 Причина: javax.ejb.CreateException: ОШИБКА при создании сеанса с состояниемBНапример, на com.sun.ejb.containers.StatefulSessionContainer.createEJBLocalBusinessObjectImpl (StatefulSessionContainer.java:553) на com.sun.ejb.containers.BaseContainer.createEJBLocalBusinessObjectImpl (BaseContainerHBJJEJB)createEJBLocalBusinessObjectImpl (EJBLocalHomeImpl.java:113) в com.sun.ejb.containers.EJBLocalHomeInvocationHandler.invoke (EJBLocalHomeInvocationHandler.java:153) ... еще 77, вызываемых службой JavaService.service.service.service (): 52) в service.UserServiceJPA.initUsers (UserServiceJPA.java:44) в service.UserServiceJPA. (UserServiceJPA.java:35) в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) (родительский метод)..java: 39) в sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:27) в java.lang.reflect.Constructor.newInstance (Constructor.java:513) в java.lang.Class.newInstance0 (Class.java:355) в java.lang.Class.newInstance (Class.java:308) в com.sun.ejb.containers.StatefulSessionContainer._constructEJBInstance (StatefulSessionContainer.java:569) в com.sun.ejb.containers.BaseContainer.createEjbInstanceAndContext (BaseContainer.java:1616) при com.sun.ejb.containers.StatefulSessionContainer.createBeanInstance (StatefulSessionContainer.java:581) в com.sun.ejb.containers.StatefulSessionContainer.createEJBLocalBusinessObjectImpl (StatefulSessionContainer.java: 534) ... еще 80

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

bean.KwetterBean.Followers(KwetterBean.java:218, кажется, это то место, на которое стоит посмотреть.

Вероятно, user.getFollowing() возвращает null и вызывает contains(), что делает его бомбой.

Я думаю, вам следует подключиться к отладчику, установить его на NPE и просто посмотреть, где он останавливается. Это позволит вам проверить переменные и получить исправление быстрее, чем ждать ответов здесь.

0 голосов
/ 13 апреля 2011

Попробуйте использовать @EJB вместо @Inject для службы Внедрение зависимостей

...