java.util.MissingResourceException:找不到基本名称 javax.servlet.LocalStrings、区域设置 es_ES 的包

2023-12-29

我试图在我的一个 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:找不到基本名称 javax.servlet.LocalStrings、区域设置 es_ES 的包

这才是真正的错误。

您的运行测试缺少servlet-api依赖性。

如果您使用 Maven,请确保此依赖项存在于您的项目中:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.1.0</version>
</dependency>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.util.MissingResourceException:找不到基本名称 javax.servlet.LocalStrings、区域设置 es_ES 的包 的相关文章

随机推荐

  • 如何禁止 easy_install 压缩 Egg?

    我必须投入什么distutils cfg防止easy install安装压缩的egg 压缩是一个很好的想法 但我喜欢能够 grep 并调试该代码 我引入了一些依赖项python setup py develop 仔细观察发现它也接受 alw
  • C# 自定义代码片段函数

    我有一个像这样的代码片段结构 private type lowercaseName public type uppercaseName get return lowercaseName set lowercaseName value 它会生
  • 使用自定义双括号格式进行 Python 模板安全替换

    我正在尝试替换格式中的变量 var 与Python的模板 from string import Template class CustomTemplate Template delimiter pattern r P
  • Qt 如何制作和安装插件?

    我想使用这里提到的 Qt Quick Components for Desktop http labs qt nokia com 2011 03 10 qml components for desktop http labs qt noki
  • 运行时按路径加载共享库

    我正在构建一个 Java 应用程序 该应用程序使用用 C 编写并针对不同操作系统进行编译的共享库 问题是 这个共享库本身依赖于它通常在适当的环境变量下找到的附加库 PATH LIBRARY PATH or LD LIBRARY PATH 我
  • 如何撤消剥离 -即将符号添加回剥离的二进制文件

    我有一个剥离的二进制文件和符号文件 是否可以将符号添加回二进制并创建未剥离的二进制 我的用例是使用这个二进制文件和 valgrind 对于那些不支持单独的调试信息文件的工具 您可以将调试部分粘回原始二进制文件 您可以按照这些思路做一些事情
  • 如何在 Angular API 请求的标头中传递 x-api-key? [复制]

    这个问题在这里已经有答案了 我正在尝试发送x api keyheaders中的header如下图 服务 ts import Injectable from angular core import Http Headers RequestOp
  • 安装 APK 时出现 DELETE_FAILED_INTERNAL_ERROR 错误

    I am using Android Studio 2 2 Preview I am facing the issue 失败 安装失败无效的apk 错误 安装 apk 时 我已经在 build gradle 中进行了更改 但无法重新跟踪它
  • ng-grid 支持虚拟滚动吗?

    我想在我的应用程序中使用 Slickgrid 来实现网格功能 但由于我大部分时间都使用 AngularJS 我认为 ng grid 是可行的方法 但不确定它是否支持虚拟滚动 我尝试查看他们的文档和没有找到任何有关虚拟滚动支持的信息 如果可能
  • 如何在一定时间限制后调用另一个活动

    如何为将一项活动调用另一项活动设定时间限制 我想在给定的时间限制内调用另一个活动 例如 将 A 类呼叫到 B 类 我使用了alarmManager 但我的应用程序不可能也使用线程 每当我给出Thread sleep时 它都不会执行操作 直到
  • 为什么使用单例而不是静态方法?

    对于这些有关帮助器 实用程序类的简单问题 我从未找到好的答案 为什么我要创建一个单例 无状态 而不是使用静态方法 如果对象没有状态 为什么还需要对象实例 通常 单例用于引入某种全局状态到一个应用程序 老实说 这种情况经常超出真正必要的范围
  • 函数声明中缺少“虚拟”限定符

    在搜寻一些旧代码时 我遇到了类似于以下内容的内容 class Base public virtual int Func class Derived public Base public int Func Missing virtual qu
  • 使用 Apache CXF 的 JAX-RS 文件上传

    我正在尝试使用 JAX RS 和 TomEE 的 Apache CXF 实现 2 6 14 上传文件 但上传的文件始终为空 这是代码 POST Path upload Consumes MediaType MULTIPART FORM DA
  • 使用 XAML 将故事板完成时元素的可见性设置为折叠

    我有一个故事板动画 它使用不透明度属性使控件淡出视图 完成后 我想将控件的可见性设置为折叠 我也希望能够执行相反的操作 将可见性设置为可见 然后使用故事板将控件淡入视图中 我知道我可以连接事件 但我想在 XAML 中完成这一切 是否可以 你
  • 如何从 git 存储库加载最新的 Clojure 库

    我想使用最新的开发版本clojure data xml 我正在使用 Leiningen 来管理依赖项 但是 存储库中没有 SNAPSHOT 版本Central http search maven org search 7Cgav 7C1 7
  • Common Lisp 双反引号、反引号、引号、反引号序列?

    我正在阅读 Let Over Lambda 它涉及一些非常深入的分层宏创作 这很有趣 我基本上都能跟上它的步伐 在第 4 章中 Hoyte 为 CL PPCRE 匹配和替换功能实现了读取器宏 这样您就可以执行以下操作 m foo bar d
  • 如何围绕 Web Workers API 编写 Promise 包装器?

    我正在编写一个使用 Web Workers 的库 库的使用者不应该看到任何 Web Worker 的内容 而应该从该库的公共方法返回一个 Promise 如下所示 consumer js const api new Api api doCa
  • timer_create() : -1 EAGAIN(资源暂时不可用)

    我在运行 ARM 的嵌入式 Linux 下创建计时器时遇到问题 我正在使用自制的 C 库来管理计时器 我自己没有编写代码 尽管我可以访问源代码 但我并不深入了解其实现 它工作了一段时间 然后我收到错误 EAGAIN 使用 strace 我注
  • 在急切加载中过滤导航属性

    我一直在使用软删除 现在我想加载未 删除 的实体的导航属性 我找到了一种方法 这种方法的问题对我来说并不清晰 还有另一种方法可以做到这一点 Context CreateSet Include Salary Select u gt new U
  • java.util.MissingResourceException:找不到基本名称 javax.servlet.LocalStrings、区域设置 es_ES 的包

    我试图在我的一个 servlet 中执行一些 jUnit 测试 但每当我尝试运行它时 我都会收到 ExceptionInInitializerError 我读到此错误是由于在评估静态初始值设定项或静态变量的初始值设定项期间发生的异常所致 问