0

我有一个我无法从逻辑上理解的错误。我正在实现 RSS 处理应用程序。逻辑是用户获取一些 RSS 提要的链接并添加到数据库。如果 feed 已经存在于数据库中,它会获取 feed 的 id 并将其添加到用户的订阅中。这是代码:

 if (existfeed == null) {
            feed = loadFeed(url, syndfeed);
            em.persist(feed);
            if (feed.getFeedId() == null) {
                return "Persist of feed failed";
            } 
                uf.setFeedId(feed);
                uf.setUserId(user_id);
                try {
                    em.persist(uf);
                    loadFeedItems(syndfeed, feed);
                    //boolean ufadded = uf.addUserFeed(em);
                } catch (NoResultException ex) {
                    return "Persist of userfeed failed";
                } catch (PersistenceException ex) {
                    return "Persist of userfeed failed, em";
                }
                //boolean ufadded = uf.addUserFeed(em);

                //return true;                
            return "Feed added";
        } else {
            dbFeed = getFeed(feed.getLink());
            if(dbFeed==null)
                return "Faile to get feed from database";
            //http://appleinsider.ru/feed
            uf.setFeedId(dbFeed);
            uf.setUserId(user_id);
            try {
                em.persist(uf);
            } catch (PersistenceException ex) {
                //System.out.println(ex.getMessage());
                return "Unable to persist userfeed";
            }
            return "Feed added, existing";
        }

但是,如果用户添加了提要,则其他用户无法添加它并且出现错误:

 Caused by: java.lang.NullPointerException
at ejb.FeedBean.addNewFeed(FeedBean.java:203) [Group_7_Impl_uwx09sua-ejb.jar:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [classes.jar:1.6.0_51]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [classes.jar:1.6.0_51]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [classes.jar:1.6.0_51]
at java.lang.reflect.Method.invoke(Method.java:597) [classes.jar:1.6.0_51]
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory

我只是不明白为什么会失败。我的一个观点是,EntityManager 可能以某种方式为空。但是,在 if 语句的第一部分它有效。

更新:我尝试使用 EntityManager 查找方法,它导致了同样的错误。因此,毫无疑问,EntityManager 在 if 语句的第二部分中以某种方式为空。

感谢所有的帮助。

4

0 回答 0