2012-04-03 7 views
1

Ich habe das AffableBean Tutorial von der NetBeans-Website here gefolgt.Affable Bean Java EJB Glassfish Tutorial Ausgaben

Code Repo here.

Ich bin auf ein Problem gestoßen, bei dem ich keine Bestellung abschicken kann (checkout.jsp). Wenn ich die Formulardaten übermitteln, ich einen HTTP-500-Status und die folgenden Fehlermeldungen:

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) 

Linie 184 von ControllerServlet ist: Map orderMap = orderManager.getOrderDetails (orderId);

Zeile 111 von OrderManager ist: Kunde customer = order.getCustomer();

Während eine Debug-Sitzung ausgeführt wird, scheint es, dass der Täter die Linie in OrderManger innerhalb der getOrderDetails() Methode. Soweit ich das beurteilen kann, soll die Linie das Kundenobjekt mit dem Kunden des Auftrags füllen.

Blick in die. GetCustomer() Methode stammt sie aus der Customer Entity-Klasse ist:

private Customer customer;  
... 
public Customer getCustomer() { 
     return customer; 
    } 

scheint einfach genug, es gibt das Customer-Objekt. Was mich verwirrt, ist, warum ich eine Nullpointer-Ausnahme erhalten würde, warum ist dieses Objekt leer?

Ich glaube, es könnte an meiner Entitätsklasse liegen, die falsch ist, dies wiederum würde bedeuten, dass meine Datenbank, die ich aus einem Entity-Diagramm entwickelte, falsch wäre, bin ich auf dem richtigen Weg?

Edit:

Nachdem die Try-Catch-Block vom placeOrder() Methode innerhalb der KlasseOrdermanager entfernt aufgrund sie den Rückgabewert zu modifizieren 0

ich habe laufen in zusätzliche Probleme:

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()*) 

Ich lese gerade auf ho w über die Fehler zu iterieren und zu finden, welche Einschränkung ich versage.

Edit2:

Debuggen des AddCustomer Methode i der Kunde id sehen null ist, ist das in Ordnung? Ich nehme an, es ist, wie das ID-Datenbank-Feld auf Auto-Inkrement eingestellt ist, scheint immer noch ungerade, in diesem Fall ein einstellbares ID-Feld in der Entität zu haben.

Edit3: aus Schaltet die automatisch generierten [NotNull] Tags in meinen Entitätsklassen verursacht wurden Bean Validierung fehl, entfernt die Tags und es funktioniert gut.

+0

Sie sollten eine neue Frage – perissf

Antwort

1

Die einzige mögliche Ursache, die ich für eine NPE dort geworfen sehe, ist, dass order selbst ein Null-Objekt ist.

Seit Auftrag gegeben ist durch:

CustomerOrder order = customerOrderFacade.find(orderId); 

meine Schlussfolgerung ist, dass ein Auftrag mit diesen orderId ist einfach nicht in der db.

+0

Sie Recht hatten, lief ich eine Debug-Sitzung auf dem Ordermanager placeOrder() -Methode und die try catch-Block die getID Wert auf 0 'wurde das Überschreiben order.getId zurückkehren() ; } catch (Ausnahme e) { context.setRollbackOnly(); Rückgabe 0; } ' danke. – Chomp

+0

@Chomp Sei willkommen! Sie können die Antwort in diesem Fall akzeptieren ... – perissf

Verwandte Themen