2016-04-18 29 views
7

Ottenere un'eccezione del puntatore nullo all'avvio chiamando il metodo activate sull'oggetto client. Ecco il mio codice.Ottenere java.lang.NullPointerException durante la chiamata al metodo di attivazione su TaskClient

@RequestMapping(value="/loanreq",method=RequestMethod.GET) 
    public String loanRequest(HttpServletRequest req,HttpSession session) throws DroolsParserException, IOException, NamingException{ 

    StatefulKnowledgeSession ksession = processEngine.getKsession(); 

    ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new WSHumanTaskHandler()); 

    TaskClient client = new TaskClient(new MinaTaskClientConnector("UserTask",new MinaTaskClientHandler(SystemEventListenerFactory.getSystemEventListener()))); 

     client.connect("ipaddress", 9123); 
     BlockingTaskOperationResponseHandler responseHandler = 

       new BlockingTaskOperationResponseHandler(); 
     client.activate(3, "krisv", responseHandler); 

     client.start(3, "krisv", responseHandler); 

      client.complete(3, "krisv", null, responseHandler); 




    Map<String,Object> params=new HashMap(); 
    params.put("employee", "krisv"); 


    ProcessInstance processInstance =ksession.startProcess("com.vr.controller2",params); 


    System.out.println("id is "+processInstance.getId()); 

    return "return1"; 
    } 

E sto ottenendo la seguente eccezione

java.lang.NullPointerException 
at org.jbpm.task.service.mina.MinaTaskClientConnector.write(MinaTaskClientConnector.java:118) 
at org.jbpm.task.service.TaskClient.activate(TaskClient.java:651) 
at com.vr.controller.hellocontroller.loanRequest(hellocontroller.java:181) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212) 
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116) 
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323) 
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173) 
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:745) 

ho visto l'oggetto client durante il debug, ma non è null.Dont sapere perché sto ottenendo questo error.I sto ottenendo questo errore a la riga "client.activate()" non in "client.connect()".

+0

Eventuali duplicati di [cosa è un'eccezione Null Pointer, e come si fa Ho risolto il problema?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) – Kenster

+0

Non ho problemi come in così detto collegamento. Si tratta di un caso diverso. Sta stabilendo la connessione client e l'avvio. Qui non ricevo eccezioni su client.connect() ma su client.start() (qualcosa relativo a jbpm). – smith

+0

@smith il problema qui è che 'client.connect()' non lancia eccezioni in nessun caso, restituisce semplicemente 'true' o' false' per indicare che è connesso o meno. –

risposta

4

In base allo stack trace questo errore appare perché session all'interno di MinaTaskClientConnector è null. Per quanto ho capito dal codice sorgente di TaskClient e MinaTaskClientConnector questo si verifica a causa di un guasto in connect metodo, all'interno di questo blocco di codice:

try { 
     connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); 

     ConnectFuture future1 = connector.connect(address); 
     future1.awaitUninterruptibly(); 
     if (!future1.isConnected()) { 
      return false; 
     } 
     session = future1.getSession(); 
     return true; 
} catch (Exception e) { 
     logger.error(e.getMessage(), e); 
     return false; 
} 

Potete trovare errore esatto nel registro o mettendo breakpoint all'interno catch blocco.

Inoltre vorrei consigliare controllare risultato del metodo connect (torna boolean valore per indicare circa il successo di connessione) e fare qualcosa del genere:

if (client.connect("ipaddress", 9123) { 
     BlockingTaskOperationResponseHandler responseHandler = new BlockingTaskOperationResponseHandler(); 
     client.activate(3, "krisv", responseHandler); 
     client.start(3, "krisv", responseHandler); 
     client.complete(3, "krisv", null, responseHandler); 
     Map<String,Object> params=new HashMap(); 
     params.put("employee", "krisv"); 
     ProcessInstance processInstance =ksession.startProcess("com.vr.controller2",params); 
     System.out.println("id is "+processInstance.getId()); 
     return "return1"; 
} else { 
     //TODO code to report connection error 
} 
+0

Mentre sto usando questo connettore.connect() viene mostrato come nosuchmethod.Il connettore MinaTaskClientConnector. – smith

+0

@smith 'MinaTaskClientConnector.connect' verrà chiamato all'interno di' TaskClient.connect' è sufficiente ottenere che questo metodo restituisca 'true' not' false'. –

+0

qui non esiste alcun metodo chiamato getfilterchain() all'interno di MinaTaskClientConnector – smith