2015-07-22 3 views
8

Ich versuche, einen jUnit-Test in einem meiner Servlets durchzuführen, aber wenn ich versuche, es auszuführen, erhalte ich einen ExceptionInInitializerError. Ich habe gelesen, dass dieser Fehler auf eine Ausnahme zurückzuführen ist, die während der Evaluierung eines statischen Initialisierers oder des Initialisierers für eine statische Variable aufgetreten ist. Die Sache ist, dass, obwohl ich versuchte, es zu beheben, ich kann. Deshalb schreibe ich hier: mein Servlet-Code ist der folgende:java.util.MissingResourceException: Bündel für Basisname nicht gefunden javax.servlet.LocalStrings, locale es_ES

public class AppServlet extends HttpServlet { 

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 
/** 
* Handles the HTTP <code>GET</code> method. 
* 
* @param request servlet request 
* @param response servlet response 
* @throws ServletException if a servlet-specific error occurs 
* @throws IOException if an I/O error occurs 
*/ 
@Override 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 

     //obtenemos los valores de los campos del formulario. 
     String usr = request.getParameter("usrName"); 
     String cp = request.getParameter("codigoPostal"); 
     Gson gson = new Gson(); 
     if (usr == null || cp == null || cp.length() != 5) { 
      Result r = new Result("KO", "No se introdujeron bien los datos"); 
      String jsonString = gson.toJson(r); 
      out.println(jsonString); 
      return; 
     } 

     //procedemos a convertir el codigo postal en la ciudad usando geonames: 
     //para ello usaremos la api de geonames 
     String city = geoLocalize.localizeCity(cp); 

     //empezaremos con el codigo de depuración para ver donde podemos tener errores 
     if (city == null) { 
      Result r = new Result("KO", "No hay ciudad para dicho codigo postal"); 
      String jsonString = gson.toJson(r); 
      out.println(jsonString); 
      return; 
     } 
     //comenzamos con las bases de datos 
     SQLconnection db = new SQLconnection(); 
     //una vez creada la conexion deberemos hacer las insert en las tablas. 

     if (!db.checkUsr(usr)) { 
      if (db.insertUsr(usr)) { 
       int numCp = parseInt(cp); 
       if (!db.checkCP(numCp)) { 
        if (db.addCity(numCp, city)) { 
         Result r = new Result("OK", "Proceso terminado sin problemas"); 
         String jsonString = gson.toJson(r); 
         out.println(jsonString); 
         return; 
        } else { 
         Result r = new Result("KO", "No se ha podido añadir la ciudad"); 
         String jsonString = gson.toJson(r); 
         out.println(jsonString); 
         return; 
        } 

       } else { 
        Result r = new Result("OK", "Se ha añadido el usuario, el codigo postal ya estaba"); 
        String jsonString = gson.toJson(r); 
        out.println(jsonString); 
        return; 
       } 
      } else { 
       Result r = new Result("KO", "No se ha podido añadir el usuario"); 
       String jsonString = gson.toJson(r); 
       out.println(jsonString); 
       return; 
      } 

     } else { 
      Result r = new Result("KO", "El usuario ya existe en el sistema"); 
      String jsonString = gson.toJson(r); 
      out.println(jsonString); 
      return; 
     } 

    } catch (IOException | NumberFormatException ex) { 
     Logger.getLogger(AppServlet.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (Exception ex) { 
     Logger.getLogger(AppServlet.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

}

Und meine JUnit-Testcode ist folgende:

public class AppServletTest extends TestCase { 

HttpServletRequest request; 
HttpServletResponse response; 
AppServlet instance; 

public AppServletTest(String testName) { 
    super(testName); 

} 


@Override 
protected void setUp() throws Exception { 
    request = mock(HttpServletRequest.class); 
    response = mock(HttpServletResponse.class); 
    instance = new AppServlet(); 
    super.setUp(); 
} 


@Override 
protected void tearDown() throws Exception { 
    super.tearDown(); 
} 

/** 
* Test of doGet method, of class AppServlet. 
* 
* @throws java.lang.Exception 
*/ 

public void testDoGet() throws Exception { 
    System.out.println("doGet"); 

    //generamos los parametros y un .txt donde guardaremos la respuesta JSON 
    when(request.getParameter("usrName")).thenReturn("Javi"); 
    when(request.getParameter("codigoPostal")).thenReturn("48991"); 
    PrintWriter writer = new PrintWriter("resultadoPruebas.txt"); 
    when(response.getWriter()).thenReturn(writer); 

    //mandamos la peticion al servlet 
    instance.doGet(request, response); 

    verify(request, atLeast(1)).getParameter("usrName"); // para verificar si se ha llamado a usrName 
    writer.flush(); // it may not have been flushed yet... 
    assertTrue(FileUtils.fileRead(new File("somefile.txt"), "UTF-8") 
      .contains("OK")); 


} 

}

Ein hier ist Der vollständige Stacktrace:

java.lang.ExceptionInInitializerError 
at com.jbo.testapp.AppServletTest.setUp(AppServletTest.java:36) 
at junit.framework.TestCase.runBare(TestCase.java:128) 
at junit.framework.TestResult$1.protect(TestResult.java:106) 
at junit.framework.TestResult.runProtected(TestResult.java:124) 
at junit.framework.TestResult.run(TestResult.java:109) 
at junit.framework.TestCase.run(TestCase.java:120) 
at junit.framework.TestSuite.runTest(TestSuite.java:230) 
at junit.framework.TestSuite.run(TestSuite.java:225) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:96) 
at org.apache.maven.surefire.junit.JUnit3Provider.executeTestSet(JUnit3Provider.java:117) 
at org.apache.maven.surefire.junit.JUnit3Provider.invoke(JUnit3Provider.java:94) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164) 
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110) 
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) 
at 

org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) 
Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES 
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) 
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) 
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) 
    at javax.servlet.GenericServlet.<clinit>(GenericServlet.java:95) 
    ... 24 more 
Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES 
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564) 
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387) 
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:773) 
    at javax.servlet.GenericServlet.<clinit>(GenericServlet.java:95) 
    ... 24 more 

Hoffe ihr könnt mir helfen! Vielen Dank im Voraus

+2

die volle stacktrace hinzufügen:

Wenn Sie Maven verwenden stellen Sie sicher, diese Abhängigkeit in Ihrem Projekt. – Jens

+0

du gehst! hinzugefügt :) –

Antwort

21

Verursacht durch: java.util.MissingResourceException: Kann nicht Bundle für Basisnamen javax.servlet.LocalStrings, locale es_ES

Das ist der wahre Fehler finden.

Ihre laufenden Tests fehlen die servlet-api Abhängigkeit. bitte

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 
+0

Vielen Dank! das Problem ist gelöst, du hattest Recht. –

+3

Seltsam. Ich dachte 'javax: javaee-api: 7.0' sollte ausreichen. – Jarekczek

+0

Sie können dies auch unter "bereitgestellt" Bereich. – zygimantus

Verwandte Themen