2012-12-10 5 views
0

Je suis nouveau à EJB et donc j'exécutais un projet EJB exemple comme dans le tutoriel Java EE 6 tutorialErreur 500: java.lang.NullPointerException lors de l'exécution d'un échantillon d'EJB projet

Voilà comment les haricots chercher:

Converter.java

package converter.ejb; 

import java.math.BigDecimal; 
import javax.ejb.Remote; 

@Remote 
public interface Converter { 
    public BigDecimal dollarToYen(BigDecimal dollars); 
    public BigDecimal yenToEuro(BigDecimal yen); 
} 

ConverterBean.java

package converter.ejb; 

import java.math.BigDecimal; 
import javax.ejb.LocalBean; 
import javax.ejb.Stateless; 

@Stateless 
public class ConverterBean { 

    private BigDecimal yenRate = new BigDecimal("115.3100"); 
    private BigDecimal euroRate = new BigDecimal("0.0071"); 

    public BigDecimal dollarToYen(BigDecimal dollars) { 
     BigDecimal result = dollars.multiply(yenRate); 
     return result.setScale(2, BigDecimal.ROUND_UP); 
    } 

    public BigDecimal yenToEuro(BigDecimal yen) { 
     BigDecimal result = yen.multiply(euroRate); 
     return result.setScale(2, BigDecimal.ROUND_UP); 
    } 
} 

ConverterClient.java

package converter.ejb; 

import java.math.BigDecimal; 
import javax.ejb.EJB; 

public class ConverterClient { 

    @EJB 
    private static Converter converter; 

    public ConverterClient(String[] args) { 
    } 

    public static void main(String[] args) { 
     ConverterClient client = new ConverterClient(args); 
     client.doConversion(); 
    } 

    public void doConversion() { 
     try { 
      BigDecimal param = new BigDecimal("100.00"); 
      BigDecimal yenAmount = converter.dollarToYen(param); 

      System.out.println("$" + param + " is " + yenAmount 
        + " Yen."); 
      BigDecimal euroAmount = converter.yenToEuro(yenAmount); 
      System.out.println(yenAmount + " Yen is " + euroAmount 
        + " Euro."); 

      System.exit(0); 
     } catch (Exception ex) { 
      System.err.println("Caught an unexpected exception!"); 
      ex.printStackTrace(); 
     } 
    } 
} 

J'ai un client Web qui est une page JSP: converterweb.jsp

<%@ page import="converter.ejb.Converter, 
      java.math.*, javax.naming.*"%>  
<%! 
    private Converter converter = null; 
    public void jspInit() { 
     try { 
      InitialContext ic = new InitialContext(); 
      converter = (Converter) 
        ic.lookup(Converter.class.getName()); 
     } catch (Exception ex) { 
      System.out.println("Couldn’t create converter bean."+ 
        ex.getMessage()); 
     } 
    } 
     public void jspDestroy() { 
     converter = null; 
    } 
%> 
<html> 
    <head> 
     <title>Converter</title> 
    </head> 

    <body bgcolor="white"> 
     <h1>Converter</h1> 
     <hr> 
     <p>Enter an amount to convert:</p> 
     <form method="get"> 
      <input type="text" name="amount" size="25"> 
      <br> 
      <p> 
      <input type="submit" value="Submit"> 
      <input type="reset" value="Reset"> 
     </form> 

     <% 
      String amount = request.getParameter("amount"); 
      if (amount != null && amount.length() > 0) { 
       BigDecimal d = new BigDecimal(amount); 

       BigDecimal yenAmount = converter.dollarToYen(d); 
     %> 
     <p> 
     <%= amount %> dollars are <%= yenAmount %> Yen. 
     <p> 
     <% 
       BigDecimal euroAmount = 
         converter.yenToEuro(yenAmount); 
     %> 
     <%= amount %> Yen are <%= euroAmount %> Euro. 
     <% 
      } 
     %> 
    </body> 
</html> 

Mais je reçois un NullPointerException chaque fois que j'essaie d'exécuter ce projet. J'utilise le serveur d'application Websphere. Quelqu'un peut-il s'il vous plaît faire la lumière sur la raison pour laquelle cela se produit et comment je peux le rectifier?

Edit: Erreur journal

[12/10/12 14:21:26:956 IST] 0000001f webapp  E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[/converterweb.jsp]: java.lang.NullPointerException 
    at com.ibm._jsp._converterweb._jspService(_converterweb.java:118) 
    at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:99) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1188) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:763) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:454) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122) 
    at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:205) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1020) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:895) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:195) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659) 
+0

Où obtenez-vous le NPE? je suppose dans la ligne où vous appelez 'converter.dollarToYen (param)', non? – Yevgeniy

+0

@Yevgeniy Je ne suis pas sûr où est le NPE. Le journal des erreurs Websphere pointe vers le fichier Java qui est la conversion du fichier JSP. Mon JSP est converterweb.jsp, et WAS pointe vers la ligne 118 de converterweb.java que je ne peux pas ouvrir. – Rajath

+0

Si vous ne publiez pas votre journal d'erreurs de suivi, il est difficile de deviner quel est votre problème. –

Répondre

1

Votre code est plein d'erreurs:

  • injection de dépendance EJB fonctionne pour les composants gérés par conteneur. Votre ConverterClient n'a aucune annotation dessus (je suppose que vous n'avez fait aucune configuration d'EJB supplémentaire dans les descripteurs xml). Donc, le conteneur n'en est pas conscient et ne peut pas faire d'injection.
  • Votre convertisseur est déclaré statique. Cela ne marchera pas.
  • Vous essayez d'accéder à un bean déclaré comme @LocalBean (ce qui signifie qu'il affiche une vue sans interface) via l'interface à distance. Cela ne marchera pas aussi. Essayez d'utiliser directement ConverterBean ou évitez @LocalBean et utilisez @Remote (Converter.class) à la place.

Peut-être que j'ai raté quelque chose. J'espère que ça aide un peu.

+0

Je pense que ce n'est pas l'explication de ce que OP a demandé. –

+0

@Andrey J'ai suivi ce tutoriel car je suis nouveau à EJB et je l'ai mis au travail. http://docs.oracle.com/javaee/5/tutorial/doc/bnbnc.html – Rajath

+0

@Rajath Il ya des points importants dans ce tutoriel qui diffèrent de votre message: - ConverterBean n'est pas marqué avec @LocalBean; - ConverterBean implémente l'interface du convertisseur. Si vous réparez que cela devrait fonctionner je suppose. –

Questions connexes