我一直在关注位于here的NetBeans站点的affableBean教程。
代码回购here。
我遇到了一个无法提交采购订单(checkout.jsp)的问题。 当我提交表单数据时,我收到http 500状态并出现以下错误:
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行是: Map orderMap = orderManager.getOrderDetails(订单ID);
OrderManager第111行:客户客户= order.getCustomer();
在运行调试会话时,罪魁祸首似乎是 getOrderDetails()方法中的OrderManger中的行。据我所知,该行应该用订单的客户填充客户对象。
查看。 getCustomer ()方法的来源是来自CustomerOrder Entity类:
private Customer customer;
...
public Customer getCustomer() {
return customer;
}
看起来很简单,它返回Customer对象。令我困惑的是为什么我会收到一个nullpointer异常,为什么这个对象为空?
我认为可能是因为我的实体类不正确,这反过来意味着我从实体图中转发的数据库不正确,我是否在正确的道路上?
修改
从 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()*)
我目前正在阅读如何迭代错误并找出我失败的约束条件。
编辑2:
调试 addCustomer 方法我看到客户ID为null,这没关系吗?我假设它是因为ID数据库字段被设置为自动递增,但在这种情况下,在实体中根本没有可设置的id字段似乎很奇怪。
EDIT3: 事实证明,我的实体类中的自动生成的[NotNull]标签导致bean验证失败,删除了标签并且工作正常。
答案 0 :(得分:1)
我看到NPE抛出的唯一可能原因是order
本身是一个空对象。
由于订单由以下人员发出:
CustomerOrder order = customerOrderFacade.find(orderId);
我的结论是,数据库中没有orderId
的订单。