Nano Hash - криптовалюты, майнинг, программирование

Веб-приложение Netbeans Java не будет развернуто после перемещения классов в пакет

Я только что переместил все свои классы Java в пакет (SSP), так как они были внутри пакета по умолчанию uo до этого момента, и теперь мое приложение больше не будет развертываться на tomcat....

Я использую:

  • Нетбинс 8.0.2
  • Томкэт 8.0.28
  • Постгрес SQL 9.4

Я попробовал следующее без каких-либо изменений:

  • удален кэш Netbeans в C:\Users\MyUser\AppData\Local\NetBeans\Cache
  • очистить и построить проект
  • выключить tomcat и перезапустить его

Ошибка (журнал Tomcat):

03-Dec-2015 09:53:13.330 SEVERE [http-nio-8080-exec-4] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class SSP.Startup  java.lang.NullPointerException
at SSP.Load_config.getPropValues_db_user_pw(Load_config.java:89)
at SSP.Roles_rights.get_roles_rights(Roles_rights.java:52)
at SSP.Roles_rights.getInstance(Roles_rights.java:35)
at SSP.Startup.contextInitialized(Startup.java:21)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:586)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:460)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1586)
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.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1460)
at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:906)
at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:344)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Ошибка отладки Netbeans:

FAIL - Deployed application at context path /Self-Service-Portal but context failed to start
D:\Dropbox\Bachelor\Java Projects\Self-Service-Portal\nbproject\build-impl.xml:1157: The module has not been deployed.

Следующие фрагменты кода — это классы, названные в журнале tomcat:

SSP.Load_config.getPropValues_db_user_pw(Load_config.java:89)

72: public String getPropValues_db_user_pw() throws IOException {
73:    try {
74:        Properties prop = new Properties();
75:        String propFileName = "db_settings.properties";
76:        inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
77
78:        if (inputStream != null) {
79:            prop.load(inputStream);
80:        } else {
81:            throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
82:        }
83:        
84:        // compose result string (ip:port)
85:        result = prop.getProperty("db_passwd");
86:    } catch (Exception e) {
87:            System.out.println("Exception: " + e);
88:    } finally {
89:        if (inputStream != null) {
90:            inputStream.close();
91:        }
92:    }
93:    return result;
94: }

SSP.Roles_rights.get_roles_rights(Roles_rights.java:52)

40: public void get_roles_rights(){
41:
42:    // Get roles & rigths from db
43:    // variables
44:    JDBCConnection database_connection = null;
45:    ResultSet m_ResultSet = null;
46:
47:    // load standard db-user from config file
48:    Load_config properties = new Load_config();
49:
50:    // connect to postgreSQL Database
51:    try {
52:        database_connection = new JDBCConnection("Self-Service-Portal", properties.getPropValues_db_user(), properties.getPropValues_db_user_pw());
53:    } catch (IOException ex) {
54:        Logger.getLogger(User_management.class.getName()).log(Level.SEVERE, null, ex);
55:    }
       .......
114: } 

SSP.Roles_rights.getInstance(Roles_rights.java:35)

24:  public class Roles_rights {
25:     
26:     public List<List<Integer>> oe_fac_roles_rights = new ArrayList<List<Integer>>(4);
27: 
28:     private static Roles_rights instance = null;
29:     private Roles_rights() {
30:       // Exists only to defeat instantiation.
31:     }
32:     public static Roles_rights getInstance() {
33:         if(instance == null) {
34:             instance = new Roles_rights();
35:             instance.get_roles_rights();
36:         }
37:         return instance;
38:     }
39:    
40:     public void get_roles_rights(){ 
        ......
114:    }
115: }

SSP.Startup.contextInitialized(Startup.java:21)

16: public class Startup implements javax.servlet.ServletContextListener {
17:    
18:    @Override
19:    public void contextInitialized(ServletContextEvent sce) {
20:        // create singleton object to get all roles/rights from db
21:        Roles_rights tmp = Roles_rights.getInstance();
22:    }
23:
24:    @Override
25:    public void contextDestroyed(ServletContextEvent sce) {
26:        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
27:    }
28: }

На всякий случай добавлю дополнительную информацию:

веб.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="Self-Service-Portal" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
<servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>SSP.Login</servlet-class>
</servlet>
<servlet>
    <servlet-name>Usermode</servlet-name>
    <servlet-class>SSP.Usermode</servlet-class>
</servlet>
<servlet>
    <servlet-name>Echo_usermode</servlet-name>
    <servlet-class>SSP.Echo_usermode</servlet-class>
</servlet>
<servlet>
    <servlet-name>User_management</servlet-name>
    <servlet-class>SSP.User_management</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/portal.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Usermode</servlet-name>
    <url-pattern>/usermode/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Echo_usermode</servlet-name>
    <url-pattern>/echo_usermode</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>User_management</servlet-name>
    <url-pattern>/user_management/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

<listener>
    <listener-class>SSP.Startup</listener-class>
</listener>

My project structure

Структура моего проекта

Кроме того, Netbeans показывает мне ошибку для web.xml:

cvc-elt.1: Cannot find the declaration of element 'web-app'

как это показывалось раньше и никогда не вызывало проблем, я не знаю, может быть, это причина

Есть ли у кого-нибудь идеи, почему мое приложение не будет развертываться только потому, что мои классы теперь находятся внутри пакета SSP, а не в пакете по умолчанию, так как я скорректировал изменение пакета внутри web.xml??

привет Алкане


Ответы:


1

Вы пытаетесь закрыть свой входной поток, даже если он нулевой. Вместо этого подумайте о переходе на попытку с ресурсом. Или, по крайней мере, проверьте, чтобы inputStream был != null перед его закрытием.

73:    try {
76:        inputStream = getClass().getResourceAsStream(propFileName);
77
78:        if (inputStream != null) {
80:        } else {
82:        }
83:        
88:    } finally {
89:            inputStream.close(); //Might be null -> cause of your error
90:    }

Что касается причины, по которой это значение равно нулю: проверьте, был ли файл свойств развернут там, где, по вашему мнению, он должен был быть. Попробуйте использовать getClass().getResourceAsStream() вместо использования метода загрузчика классов. Попробуйте использовать абсолютный путь /SSP/db_settings.properties.

03.12.2015
  • Я добавил нулевую проверку и изменил getClass().getClassLoader().getResourceAsStream() на getClass()getResourceAsStream(propFileName), и теперь все работает нормально, большое спасибо :) 03.12.2015
  • оказывается, нулевая проверка не обязательна, но изменение с getClass().getClassLoader().getResourceAsStream() на getClass()getResourceAsStream(propFileName) действительно решило эту ошибку 03.12.2015
  • Нулевая проверка была тем, что создало видимую ошибку. И это хорошо, потому что в противном случае ваш вопрос мог бы заключаться в том, что мое соединение с базой данных не работает :-) 03.12.2015
  • Я просто не понимаю, почему это сработало, когда все классы были внутри пакета по умолчанию, и ошибка возникает только тогда, когда классы не находятся в пакете по умолчанию. 04.12.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..