和蔼可亲的Bean Java EJB Glassfish教程问题
我一直在关注位于NetBeans站点的affableBean教程 代码回购 我遇到了一个无法提交采购订单的问题(checkout.jsp)。 提交表单数据时,我收到http 500状态和以下错误:和蔼可亲的Bean Java EJB Glassfish教程问题,java,glassfish,ejb,Java,Glassfish,Ejb,我一直在关注位于NetBeans站点的affableBean教程 代码回购 我遇到了一个无法提交采购订单的问题(checkout.jsp)。 提交表单数据时,我收到http 500状态和以下错误: WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public java.util.Map session.OrderManager.getOrderDetail
WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public java.util.Map session.OrderManager.getOrderDetails(int)
WARNING: javax.ejb.EJBException at controller.ControllerServlet.doPost(ControllerServlet.java:184)
Caused by: java.lang.NullPointerException at session.OrderManager.getOrderDetails(OrderManager.java:111)
ControllerServlet的第184行是:映射orderMap=
orderManager.getOrderDetails(orderId)
OrderManager的第111行是:Customer-Customer=order.getCustomer()
运行调试会话时,罪魁祸首似乎是getOrderDetails()方法中OrderManger中的行。据我所知,该行应该用订单的customer填充customer对象
查看.getCustomer()方法的来源,它来自CustomerOrder实体类:
private Customer customer;
...
public Customer getCustomer() {
return customer;
}
看起来很简单,它返回Customer对象。让我困惑的是,为什么我会收到一个null指针异常,为什么这个对象是空的
我相信这可能是因为我的实体类不正确,这反过来意味着我从实体图向前设计的数据库不正确,我走的是正确的道路吗
编辑:
已从ordermanager类中的placeOrder()方法中删除try catch块
因此,将返回值修改为0
我遇到了其他问题:
WARNING: EJB5184:A system exception occurred during an invocation on EJB OrderManager, method: public int session.OrderManager.placeOrder(java.lang.String,....,cart.ShoppingCart)
WARNING: javax.ejb.EJBException
javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'prePersist'.**
at session.OrderManager.addCustomer(OrderManager.java:58) (*em.persist()*)
at session.OrderManager.placeOrder(OrderManager.java:42) (*Customer customer = addCustomer()*)
我目前正在阅读如何迭代错误并找到我失败的约束
Edit2:
调试addCustomer方法我看到客户id为空,可以吗?我假设是因为ID数据库字段设置为自动递增,但在这种情况下,实体中有一个可设置的ID字段似乎很奇怪
Edit3:
事实证明,我的实体类中自动生成的[NotNull]标记导致bean验证失败,删除了标记,它工作正常。我看到的NPE抛出的唯一可能原因是,
order
本身是一个空对象
由于命令由以下人员发出:
CustomerOrder order = customerOrderFacade.find(orderId);
我的结论是,数据库中根本不存在带有该命令ID的命令。我认为引发NPE的唯一可能原因是,
命令本身是一个空对象
由于命令由以下人员发出:
CustomerOrder order = customerOrderFacade.find(orderId);
我的结论是,数据库中根本不存在具有该orderId
的订单。您是对的,我在orderManager placeOrder()方法上运行了一个调试会话,try-catch块将getID值覆盖为0'return order.getID();}catch(异常e){context.setRollbackOnly();return 0;}'谢谢。您是对的,我在orderManager placeOrder()方法上运行了一个调试会话,try-catch块将getID值覆盖为0'return order.getID();}catch(异常e){context.setRollbackOnly();return 0;}'谢谢。您最好创建一个新问题您最好创建一个新问题