Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

Apparent SimpleType Issue on Server Update

$
0
0
Hi,

Our application uses a SimpleType for currency:
Code:

      currencyType = new SimpleType(“currency”, FieldType.FLOAT);
      currencyType.setNormalDisplayFormatter(new SimpleTypeFormatter() {
        @Override
        public String format(Object value, DataClass field,
              DataBoundComponent component, Record record) {
            return formatAsCurrency(value);
        }
      });
      currencyType.setShortDisplayFormatter(new SimpleTypeFormatter() {
        @Override
        public String format(Object value, DataClass field,
              DataBoundComponent component, Record record) {
            return formatAsCurrency(value);
        }
      });
      currencyType.setEditFormatter(new SimpleTypeFormatter() {
        @Override
        public String format(Object value, DataClass field,
              DataBoundComponent component, Record record) {
            return formatAsCurrency(value);
        }
      });
      currencyType.setEditParser(new SimpleTypeParser() {
        @Override
        public Object parseInput(String value, DataClass field,
              DataBoundComponent component, Record record) {
            if (value==null) return value;
            if (value.isEmpty()) return value;
            try {
              String strippedValue = trimNonDigitOrDecimal(value);
              Double valueDouble = Double.valueOf(strippedValue.length()==0 ? _0 : strippedValue);
              if (_0.equals(IPGui.homeCurrencyDecimals))
                  return valueDouble/100d;
              else
                  return valueDouble;
            } catch (NumberFormatException e) {
              return null;
            }
        }
      });
      currencyType.register();

(Methods for formatting omitted.)

ds.xml using "currency":
Code:

<DataSource ID="PriceChangeFormula" dataFormat="iscServer" serverType="sql"
  dbName="as400"
  serverConstructor="com.islandpacific.gui.server.pricing.PriceChangeFormulaDS"
  title="Price Change Formula"
  pluralTitle="Price Change Formulas">

  <fields>
      <field name="id" title="id" type="sequence" primaryKey="true" hidden="true"/>
      <field name="parentId" title="Parent ID" type="integer" foreignKey="PriceChangeInstruction.id" hidden="true"/>
      <field name="priceGroup" title="Price Group" type="text"
        optionDataSource="IPPGDFN" valueField="PGDFCDE" displayField="PGDFDES" foreignKey="IPPGDFN.PGDFCDE" hidden="true"/>
      <field name="facilityvalue" title="Facility" type="text" length="5" width="200" canEdit="false"/>
      <field name="currency" title="Currency" type="text" detail="true" canEdit="false"
        optionDataSource="IPCUCOD" foreignKey="IPCUCOD.CUCOCOD" valueField="CUCOCOD" displayField="CUCODES"
        customSelectExpression="(select PGDFCUR from IPPGDFN where PriceChangeFormula.facilityvalue=IPPGDFN.PGDFCDE)" />
      <field name="fromPrice" title="From Price" type="currency"  length="12" width="150" selectOnFocus="true" selectOnClick="true"/>
      <field name="toPrice" title="To Price" type="currency"  length="12" width="150" selectOnFocus="true" selectOnClick="true">
        </field>
      <field name="amount" title="Amount" type="currency" length="12" width="150" selectOnFocus="true" selectOnClick="true"/>
      <field name="startPrice" title="Start at Price" type="currency"
          length="12" width="150" selectOnFocus="true" selectOnClick="true"/>
      <field name="increment" title="Increment" type="currency"
          length="12" width="150" selectOnFocus="true" selectOnClick="true"/>
      <field name="storeList" title="Selected Facilities" type="text" detail="true" canEdit="false"/>
      <field name="splitqty" title="Split Quantity" type="integer" length="3"/>
      <field name="FACCUCOD" title="Currency" type="text" canEdit="false"/>
      <field name="FACCUMUY" title="Decimal Conversion" type="integer" hidden="true"/>
  </fields>
</DataSource>

(Server ctor code omitted.)

With a [v9.1p_2014-06-11/PowerEdition Deployment] library, a client update request using the above data source finishes successfully, but with [v10.0p_2015-04-28/PowerEdition Deployment], the request fails, as follows. (Using [Code] block for logging excerpts to condense post.)
Code:

=== 2015-05-06 10:47:27,702 [ec-1] DEBUG Timing - Time to convert org.apache.commons.collections.map.LinkedMap to JS Object: 0ms
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG RPCManager - Request #1 (DSRequest) payload: {
    values:{
        RuleData:[
            {
                FacilitySelection:[
                    "MG1",
                    "MG2"
                ],
                facilityvalue:"SPGC",
                storeList:"[MG1,MG2]",
                fromPrice:"0.02",
                toPrice:"999999999.99",
                startPrice:"0.01",
                increment:"0.01",
                FACCUCOD:"",
                FACCUMUY:"1",
                id:"145",
                amount:"30"
            }
        ]
    },
    operationConfig:{
        dataSource:"PriceChangeFormula",
        repo:null,
        operationType:"add",
        textMatchStyle:"exact"
    },
    componentId:"isc_DynamicForm_26",
    appID:"builtinApplication",
    operation:"PriceChangeFormula_add",
    oldValues:{
    },
    criteria:{
    }
}
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG IpIDACall - Processing 1 queued RPC operations.
=== 2015-05-06 10:47:27,702 [ec-1] WARN  IpAuthenticationManager - Property charSetNormalize not found in server.properties
=== 2015-05-06 10:47:27,702 [ec-1] INFO  IpIDACall - Performing 1 operation(s)
=== 2015-05-06 10:47:27,702 [ec-1] INFO  IpIDACall - Processing DataSource PriceChangeFormula
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DataSource - Adding new default DynamicDSGenerator with hashcode '645003273'
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DeclarativeSecurity - DataSource PriceChangeFormula is not in the pre-checked list, processing...
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG AppBase - [builtinApplication.PriceChangeFormula_add] No userTypes defined, allowing anyone access to all operations for this application
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG AppBase - [builtinApplication.PriceChangeFormula_add] No public zero-argument method named '_PriceChangeFormula_add' found, performing generic datasource operation
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating 1 'PriceChangeFormula's at path ''
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating a 'PriceChangeFormula' at path ''
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG Validation - [builtinApplication.PriceChangeFormula_add] Value provided for unknown field: PriceChangeFormula.RuleData: value is: [{FacilitySelection=[MG1, MG2], facilityvalue=SPGC, storeList=[MG1,MG2], fromPrice=0.02, toPrice=999999999.99, startPrice=0.01, increment=0.01, FACCUCOD=, FACCUMUY=1, id=145, amount=30}]
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Done validating 1 'PriceChangeFormula's at path '': 0ms (avg 0)
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG Timing - [builtinApplication.PriceChangeFormula_add] Time to convert java.util.ArrayList to JS Object: 0ms
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DataSource - [builtinApplication.PriceChangeFormula_add] post-validation valueSet: [
    {
        RuleData:[
            {
                FacilitySelection:[
                    "MG1",
                    "MG2"
                ],
                facilityvalue:"SPGC",
                storeList:"[MG1,MG2]",
                fromPrice:"0.02",
                toPrice:"999999999.99",
                startPrice:"0.01",
                increment:"0.01",
                FACCUCOD:"",
                FACCUMUY:"1",
                id:"145",
                amount:"30"
            }
        ]
    }
]
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating 1 'PriceChangeFormula's at path ''
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating a 'PriceChangeFormula' at path ''
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DataStructCache - [builtinApplication.PriceChangeFormula_add] getInstanceFile (failure): 'currency' instance of datasources: 0ms
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DataStructCache - [builtinApplication.PriceChangeFormula_add] getInstanceFile (failure): 'currency' instance of datasources: 0ms
=== 2015-05-06 10:47:27,702 [ec-1] DEBUG DSRequest - About to free up resources for request of type add on DataSource PriceChangeFormula
=== 2015-05-06 10:47:27,703 [ec-1] WARN  RequestContext - dsRequest.execute() failed:
java.lang.NullPointerException
        at com.isomorphic.datasource.BasicDataSource.getFieldType(BasicDataSource.java:2281)
        at com.isomorphic.datasource.BasicDataSource.validateFieldValue(BasicDataSource.java:1893)
        at com.isomorphic.datasource.BasicDataSource.validateFieldValue(BasicDataSource.java:1877)
        at com.isomorphic.datasource.BasicDataSource.toRecord(BasicDataSource.java:1272)
        at com.isomorphic.datasource.BasicDataSource.toRecords(BasicDataSource.java:1209)
        at com.isomorphic.datasource.BasicDataSource.toRecords(BasicDataSource.java:1170)
        at com.isomorphic.datasource.DataSource.validateDSRequest(DataSource.java:3163)
        at com.isomorphic.datasource.DataSource.validateDSRequest(DataSource.java:3112)
        at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:427)
        at com.isomorphic.sql.SQLDataSource.executeUpdate(SQLDataSource.java:392)
        at com.islandpacific.gui.server.pricing.PriceChangeFormulaDS.executeUpdate(PriceChangeFormulaDS.java:78)
        at com.islandpacific.gui.server.pricing.PriceChangeFormulaDS.executeAdd(PriceChangeFormulaDS.java:45)
        at com.isomorphic.datasource.DataSource.execute(DataSource.java:1950)
        at com.islandpacific.gui.server.customDataSource.IpDataSource.execute(IpDataSource.java:343)
        at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:726)
        at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
        at com.isomorphic.application.AppBase.execute(AppBase.java:491)
        at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2548)
        at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:220)
        at com.islandpacific.gui.server.customDataSource.IpIDACall.handleDSRequest(IpIDACall.java:113)
        at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:185)
        at com.islandpacific.gui.server.customDataSource.IpIDACall.processRPCTransaction(IpIDACall.java:66)
        at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:152)
        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:646)
        at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:156)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at com.islandpacific.gui.server.GWTCacheControlFilter.doFilter(GWTCacheControlFilter.java:44)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at com.islandpacific.gui.security.IpConcurrentSessionFilter.doFilter(IpConcurrentSessionFilter.java:55)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        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:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Unknown Source)

Exercising the same client/server code but with [v9.1p_2014-06-11/PowerEdition Deployment], the update request succeeds, as follows.
Code:

=== 2015-05-06 13:16:25,902 [ec-4] DEBUG Timing - Time to convert org.apache.commons.collections.map.LinkedMap to JS Object: 0ms
=== 2015-05-06 13:16:25,902 [ec-4] DEBUG RPCManager - Request #1 (DSRequest) payload: {
    values:{
        RuleData:[
            {
                FacilitySelection:[
                    "MG1",
                    "MG2"
                ],
                facilityvalue:"SPGC",
                storeList:"[MG1,MG2]",
                fromPrice:"0.01",
                toPrice:"999999999.99",
                startPrice:"0.01",
                increment:"0.01",
                FACCUCOD:"",
                FACCUMUY:"1",
                id:"145",
                amount:"30"
            }
        ]
    },
    operationConfig:{
        dataSource:"PriceChangeFormula",
        operationType:"add",
        textMatchStyle:"exact"
    },
    componentId:"isc_DynamicForm_27",
    appID:"builtinApplication",
    operation:"PriceChangeFormula_add",
    oldValues:{
    },
    criteria:{
    }
}
=== 2015-05-06 13:16:25,902 [ec-4] DEBUG IpIDACall - Processing 1 queued RPC operations.
=== 2015-05-06 13:16:25,902 [ec-4] WARN  IpAuthenticationManager - Property charSetNormalize not found in server.properties
=== 2015-05-06 13:16:25,902 [ec-4] INFO  IpIDACall - Performing 1 operation(s)
=== 2015-05-06 13:16:25,902 [ec-4] INFO  IpIDACall - Processing DataSource PriceChangeFormula
=== 2015-05-06 13:16:25,902 [ec-4] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
=== 2015-05-06 13:16:25,902 [ec-4] DEBUG DeclarativeSecurity - DataSource PriceChangeFormula is not in the pre-checked list, processing...
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG AppBase - [builtinApplication.PriceChangeFormula_add] No userTypes defined, allowing anyone access to all operations for this application
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG AppBase - [builtinApplication.PriceChangeFormula_add] No public zero-argument method named '_PriceChangeFormula_add' found, performing generic datasource operation
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating 1 'PriceChangeFormula's at path ''
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating a 'PriceChangeFormula' at path ''
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG Validation - [builtinApplication.PriceChangeFormula_add] Value provided for unknown field: PriceChangeFormula.RuleData: value is: [{FacilitySelection=[MG1, MG2], facilityvalue=SPGC, storeList=[MG1,MG2], fromPrice=0.01, toPrice=999999999.99, startPrice=0.01, increment=0.01, FACCUCOD=, FACCUMUY=1, id=145, amount=30}]
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Done validating 1 'PriceChangeFormula's at path '': 0ms (avg 0)
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG Timing - [builtinApplication.PriceChangeFormula_add] Time to convert java.util.ArrayList to JS Object: 0ms
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG DataSource - [builtinApplication.PriceChangeFormula_add] post-validation valueSet: [
    {
        RuleData:[
            {
                FacilitySelection:[
                    "MG1",
                    "MG2"
                ],
                facilityvalue:"SPGC",
                storeList:"[MG1,MG2]",
                fromPrice:"0.01",
                toPrice:"999999999.99",
                startPrice:"0.01",
                increment:"0.01",
                FACCUCOD:"",
                FACCUMUY:"1",
                id:"145",
                amount:"30"
            }
        ]
    }
]
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating 1 'PriceChangeFormula's at path ''
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG BasicDataSource - [builtinApplication.PriceChangeFormula_add] Validating a 'PriceChangeFormula' at path ''
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG DataStructCache - [builtinApplication.PriceChangeFormula_add] getInstanceFile (failure): 'currency' instance of datasources: 0ms
=== 2015-05-06 13:16:25,903 [ec-4] DEBUG DataStructCache - [builtinApplication.PriceChangeFormula_add] getInstanceFile (failure): 'currency' instance of datasources: 0ms
=== 2015-05-06 13:16:25,904 [ec-4] WARN  Validation - [builtinApplication.PriceChangeFormula_add] No such type 'currency', not processing field value at /PriceChangeFormula/amount
=== 2015-05-06 13:16:25,904 [ec-4] DEBUG Validation - [builtinApplication.PriceChangeFormula_add] Validating field:
/PriceChangeFormula/id as PriceChangeFormula.id type: sequence
=== 2015-05-06 13:16:25,904 [ec-4] DEBUG DataStructCache - [builtinApplication.PriceChangeFormula_add] getInstanceFile (success): 'DataSource' instance of datasources: 0ms

Notice the respective payloads' request data are the same, but with the old library the following line ...

=== 2015-05-06 13:16:25,904 [ec-4] WARN Validation - [builtinApplication.PriceChangeFormula_add] No such type 'currency', not processing field value at /PriceChangeFormula/amount

... (not appearing in new library log) would seem to indicate that the 'currency' type processing was skipped, preventing the type error of the new library. Perhaps the type begins to be processed with the new library but somehow isn't functional? Please advise. Thanks.

Viewing all articles
Browse latest Browse all 4756

Trending Articles