Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Serverside addRelatedUpdate Exception - question for variable in your java file

    Hi Isomorphic,

    I'm using a fake serverside DSResponse in order to remove data from a client side ListGrid. The request sent was a customOperation request.
    I try to piggyback that DSResponse to another one like the following:

    Code:
    DSResponse returnResponse = new DSResponse(sourceDatasource, DSResponse.STATUS_SUCCESS);//sourceDatasource is a String
    
    // Return a response that triggers a remove of the specific row at the client side
    DSResponse piggybackResponse = new DSResponse(sourceDatasource, DSResponse.STATUS_SUCCESS);//sourceDatasource is a String
    /* Search for setData in Server Showcase source (sample\showcase\SERVER!) or see
     * http://www.smartclient.com/smartgwtee/server/javadoc/com/isomorphic/datasource/DSResponse.html#setData%28java.lang.Object%29
     * What happens here is that we fake a entry-removed response.
     */
    piggybackResponse.setOperationType(DataSource.OP_REMOVE);
    List<Map<String, Object>> recordList = new ArrayList<Map<String, Object>>();
    Map<String, Object> record = new HashMap<String, Object>();
    record.put("LEAD_ID", leadId); //leadId is some Long
    recordList.add(record);
    piggybackResponse.setData(recordList);
    piggybackResponse.setAffectedRows(1);
    returnResponse.addRelatedUpdate(piggybackResponse);
    
    return returnResponse;
    I get the following error in the server log:
    Code:
    === 2015-08-18 18:45:45,121 [c-14] DEBUG DataSourceDMI - Invocation threw exception
    java.lang.NullPointerException
    	at com.isomorphic.datasource.DSResponse.addRelatedUpdate(DSResponse.java:888)
    	at com.lmscompany.lms.server.worker.V_LEAD_CURRENT.removeLead(V_LEAD_CURRENT.java:426)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at com.isomorphic.base.Reflection.adaptArgsAndInvoke(Reflection.java:975)
    	at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:416)
    	at com.isomorphic.datasource.DataSourceDMI.execute(DataSourceDMI.java:64)
    	at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2544)
    	at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:220)
    	at com.lmscompany.lms.server.LMSIDACall.handleDSRequest(LMSIDACall.java:75)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:185)
    	at com.lmscompany.lms.server.LMSIDACall.processRequest(LMSIDACall.java:40)
    	at com.isomorphic.servlet.IDACall._processRequest(IDACall.java:117)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:76)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:156)
    	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:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:260)
    	at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:83)
    	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:611)
    	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:409)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    As the whole code is independent of any outer variables you should be able to reproduce easily.

    Perhaps it is also enough if you could tell me what variable exactly is used in DSResponse.java:888? Perhaps I forgot some important value when faking my response.

    I'm using today's v10.0p_2015-08-18/PowerEdition Deployment.

    Thank you & Best regards
    Blama

    #2
    This seems to indicate that neither "returnResponse" nor "piggybackResponse" has a DataSource - in other words that your "sourceDataSource" variable is null.

    Comment


      #3
      Thanks, I'll check that tomorrow.

      Best regards
      Blama

      Comment


        #4
        Hi Isomorphic,

        it seems you added a null-check for this in v10.0p_2015-08-19/20/21. Thanks for that. Now I get an error message at the client side complaining about the missing DataSource, which is way better.

        My error in the code is/was that I used:
        Code:
        DSResponse piggybackResponse = new DSResponse(sourceDatasource, DSResponse.STATUS_SUCCESS);[B]//sourceDatasource is a String[/B]
        DSResponse does not have a constructor DSResponse(String ds, int status). My call got interpreted as DSResponse(Object data, int status).

        Correct is:
        Code:
        DSResponse piggybackResponse = new DSResponse(dsRequest.getRPCManager().getDataSource(sourceDatasource), DSResponse.STATUS_SUCCESS);
        Best regards
        Blama

        Comment

        Working...
        X