java.util.MissingResourceException: 找不到基本名称 javax.servlet.LocalStrings、locale es_ES 的bundle



我试图在我的一个servlet中执行一些jUnit测试,但每当我尝试运行它时,我都会获得一个ExceptionInInitializerError。我读到这个错误是由于一个异常,在计算静态初始化器或静态变量的初始化器时发生的。问题是,尽管我试着去弥补,我还是做不到。这就是为什么我在这里写:我的servlet代码如下:

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

}

我的jUnit测试代码如下:
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"));

}

}

下面是完整的堆栈跟踪:

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

希望你们能帮助我!提前谢谢大家

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

这才是真正的错误。

正在运行的测试缺少servlet-api依赖项。

如果你正在使用maven,确保这个依赖项在你的项目中:

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

相关内容

  • 没有找到相关文章

最新更新