-
Bug
-
Resolution: Done
-
Major
-
None
-
None
I have a remote cache that uses an xml file to define the config properties for a persistent replicated cache. For the persistence component I am using <query-jdbc-store>. The database I am trying to connect to is a Postgres database with camelCase table names. Because the tables and columns are camelCase, the sql that is used for the <queries> section of the config file (like select-single, select-all, size, etc.) needs to use double quotes in the sql syntax. For example: 'SELECT plan."systemAccount", plan."yearMonth" FROM sde."ProductPlan"';
Currently, Infinispan is unable to parse these double quotes even if the parameter value is enclosed in a single quote. Example: `"select-all": 'select c."systemAccount"...`
This is the error that I get from the Infinispan server (you get this using xml, json, or yaml file formats for the config since these are all converted to xml on runtime):
Caused by: org.infinispan.commons.CacheListenerException: ISPN000280: Caught exception [org.infinispan.commons.configuration.io.xml.XmlPullParserException] while invoking method [public java.util.concurrent.CompletionStage org.infinispan.globalstate.impl.GlobalConfigurationStateListener.handleCreate(org.infinispan.notifications.cachelistener.event.CacheEntryCreatedEvent)] on listener instance: org.infinispan.globalstate.impl.GlobalConfigurationStateListener@4b3206df at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.lambda$invoke$1(AbstractListenerImpl.java:437) at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.invoke(AbstractListenerImpl.java:457) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.doRealInvocation(CacheNotifierImpl.java:1793) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.doRealInvocation(CacheNotifierImpl.java:1789) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invokeNoChecks(CacheNotifierImpl.java:1784) at org.infinispan.notifications.cachelistener.CacheNotifierImpl$BaseCacheEntryListenerInvocation.invoke(CacheNotifierImpl.java:1757) at org.infinispan.notifications.cachelistener.CacheNotifierImpl.doNotifyCreated(CacheNotifierImpl.java:428) at org.infinispan.notifications.cachelistener.CacheNotifierImpl.notifyCacheEntryCreated(CacheNotifierImpl.java:410) at org.infinispan.notifications.cachelistener.NotifyHelper.entryCommitted(NotifyHelper.java:63) at org.infinispan.interceptors.locking.ClusteringDependentLogic$ReplicationLogic.commitSingleEntry(ClusteringDependentLogic.java:505) at org.infinispan.interceptors.locking.ClusteringDependentLogic$AbstractClusteringDependentLogic.commitEntry(ClusteringDependentLogic.java:239) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitContextEntry(EntryWrappingInterceptor.java:611) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitEntryIfNeeded(EntryWrappingInterceptor.java:884) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.commitContextEntries(EntryWrappingInterceptor.java:591) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.applyChanges(EntryWrappingInterceptor.java:685) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.applyAndFixVersion(EntryWrappingInterceptor.java:737) at org.infinispan.interceptors.SyncInvocationStage.thenApply(SyncInvocationStage.java:44) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.setSkipRemoteGetsAndInvokeNextForDataCommand(EntryWrappingInterceptor.java:732) at org.infinispan.interceptors.impl.EntryWrappingInterceptor.visitPutKeyValueCommand(EntryWrappingInterceptor.java:335) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:65) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndFinally(BaseAsyncInterceptor.java:154) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.lambda$nonTxLockAndInvokeNext$3(AbstractLockingInterceptor.java:318) at org.infinispan.interceptors.SyncInvocationStage.andHandle(SyncInvocationStage.java:69) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.nonTxLockAndInvokeNext(AbstractLockingInterceptor.java:313) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitNonTxDataWriteCommand(AbstractLockingInterceptor.java:138) at org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor.visitDataWriteCommand(NonTransactionalLockingInterceptor.java:41) at org.infinispan.interceptors.locking.AbstractLockingInterceptor.visitPutKeyValueCommand(AbstractLockingInterceptor.java:82) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:65) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndHandle(BaseAsyncInterceptor.java:187) at org.infinispan.statetransfer.StateTransferInterceptor.handleNonTxWriteCommand(StateTransferInterceptor.java:312) at org.infinispan.statetransfer.StateTransferInterceptor.handleWriteCommand(StateTransferInterceptor.java:256) at org.infinispan.statetransfer.StateTransferInterceptor.visitPutKeyValueCommand(StateTransferInterceptor.java:96) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:65) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58) at org.infinispan.interceptors.impl.CacheMgmtInterceptor.updateStoreStatistics(CacheMgmtInterceptor.java:233) at org.infinispan.interceptors.impl.CacheMgmtInterceptor.visitPutKeyValueCommand(CacheMgmtInterceptor.java:196) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:65) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNext(BaseAsyncInterceptor.java:58) at org.infinispan.interceptors.DDAsyncInterceptor.handleDefault(DDAsyncInterceptor.java:54) at org.infinispan.interceptors.DDAsyncInterceptor.visitPutKeyValueCommand(DDAsyncInterceptor.java:60) at org.infinispan.commands.write.PutKeyValueCommand.acceptVisitor(PutKeyValueCommand.java:65) at org.infinispan.interceptors.BaseAsyncInterceptor.invokeNextAndExceptionally(BaseAsyncInterceptor.java:127) at org.infinispan.interceptors.impl.InvocationContextInterceptor.visitCommand(InvocationContextInterceptor.java:90) at org.infinispan.interceptors.impl.AsyncInterceptorChainImpl.invokeAsync(AsyncInterceptorChainImpl.java:211) at org.infinispan.cache.impl.InvocationHelper.doInvokeAsync(InvocationHelper.java:318) at org.infinispan.cache.impl.InvocationHelper.invokeAsync(InvocationHelper.java:156) at org.infinispan.cache.impl.InvocationHelper.invokeAsync(InvocationHelper.java:139) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:1490) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:1483) at org.infinispan.cache.impl.CacheImpl.putIfAbsentAsync(CacheImpl.java:454) at org.infinispan.cache.impl.AbstractDelegatingCache.putIfAbsentAsync(AbstractDelegatingCache.java:211) at org.infinispan.cache.impl.AbstractDelegatingCache.putIfAbsentAsync(AbstractDelegatingCache.java:211) at org.infinispan.cache.impl.EncoderCache.putIfAbsentAsync(EncoderCache.java:298) at org.infinispan.security.impl.SecureCacheImpl.putIfAbsentAsync(SecureCacheImpl.java:281) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCacheInternal(GlobalConfigurationManagerImpl.java:293) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCache(GlobalConfigurationManagerImpl.java:274) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.getOrCreateCache(GlobalConfigurationManagerImpl.java:238) ... 13 more Caused by: org.infinispan.commons.configuration.io.xml.XmlPullParserException: expected = after attribute name (position: END_TAG seen ...ect-single="select pl.id as idProviderLimits, c."systemAccount"... @1:707) at org.infinispan.commons.configuration.io.xml.MXParser.parseAttribute(MXParser.java:1756) at org.infinispan.commons.configuration.io.xml.MXParser.parseStartTag(MXParser.java:1551) at org.infinispan.commons.configuration.io.xml.MXParser.nextImpl(MXParser.java:1029) at org.infinispan.commons.configuration.io.xml.MXParser.next(MXParser.java:907) at org.infinispan.commons.configuration.io.xml.XmlConfigurationReader.hasNext(XmlConfigurationReader.java:90) at org.infinispan.commons.configuration.io.ConfigurationReader.inTag(ConfigurationReader.java:152) at org.infinispan.persistence.sql.configuration.SqlStoreConfigurationParser.parseQueryJdbcStore(SqlStoreConfigurationParser.java:85) at org.infinispan.persistence.sql.configuration.SqlStoreConfigurationParser.readElement(SqlStoreConfigurationParser.java:38) at org.infinispan.configuration.parsing.ParserRegistry.parseElement(ParserRegistry.java:212) at org.infinispan.configuration.parsing.ConfigurationBuilderHolder.handleAnyElement(ConfigurationBuilderHolder.java:150) at org.infinispan.commons.configuration.io.AbstractConfigurationReader.handleAny(AbstractConfigurationReader.java:66) at org.infinispan.configuration.parsing.CacheParser.parsePersistence(CacheParser.java:936) at org.infinispan.configuration.parsing.CacheParser.parseCacheElement(CacheParser.java:353) at org.infinispan.configuration.parsing.CacheParser.parseSharedStateCacheElement(CacheParser.java:203) at org.infinispan.configuration.parsing.CacheParser.parseReplicatedCache(CacheParser.java:779) at org.infinispan.configuration.parsing.CacheParser.readElement(CacheParser.java:112) at org.infinispan.configuration.parsing.ParserRegistry.parseElement(ParserRegistry.java:212) at org.infinispan.configuration.parsing.ParserRegistry.parse(ParserRegistry.java:195) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.buildConfiguration(GlobalConfigurationManagerImpl.java:338) at org.infinispan.globalstate.impl.GlobalConfigurationManagerImpl.createCacheLocally(GlobalConfigurationManagerImpl.java:310) at org.infinispan.globalstate.impl.GlobalConfigurationStateListener.handleCreate(GlobalConfigurationStateListener.java:46) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.infinispan.notifications.impl.AbstractListenerImpl$ListenerInvocationImpl.lambda$invoke$1(AbstractListenerImpl.java:431) ... 69 more