java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES

18,956

Caused by: java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale es_ES

That's the real error.

Your running tests are missing the servlet-api dependency.

If you're using maven make sure this dependency is in your project:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>
Share:
18,956
Javi Bsr
Author by

Javi Bsr

Updated on June 16, 2022

Comments

  • Javi Bsr
    Javi Bsr almost 2 years

    I am trying to perform some jUnit test in one of my servlets but whenever I try to run it I obtain a ExceptionInInitializerError. I've read that this error is due to an exception, occurred during evaluation of a static initializer or the initializer for a static variable. The thing is that even though I tried to fix it I can. That's why I am writing here: my servlet code is the following:

    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);
        }
    }
    

    }

    And my jUnit test code is the following:

    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"));
    
    
    }
    

    }

    An here is the full 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
    

    Hope you guys can help me! Thank you in advance